JS或TS使用LINQ表达式更新、删除、查询JSON数据

本文介绍在Cocos游戏开发中,如何利用jslinq库进行复杂数据操作,解决背包更新等场景下的数据读写难题。文章详细展示了jslinq的各种方法如where、remove等,并通过实例说明了其在游戏开发中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近学习Cocos,在做单机案列的过程中,需要实现数据的读写。由于网页端,cocos 只提供cc.sys.localStorage的setItem和getItem基本的读写方法。遇到在数据关系较复杂的时候,查询和修改数据不方便的问题。

我的个人需求如下:

在商店购买的时候,更新玩家的背包,全部用json存储的话,结构稍复杂,于是上网找到如下2个库:
1、jslinq
2、typescriptlinq
​​

经过试验测试:

第2个库各种尝试均报错,可能是我写错了,官方给的例子的是一元数组,官方例子也跑不出结果;最终选择jslinq库;


下面附上具体的方法及返回值:
 

//Where

        where?: (condition: (el: T) => boolean) => JsLinq<T>;

 

        //Select

        select: (projection: (el: T) => any) => JsLinq<T>;

 

        //GroupBy

        groupBy?: (group: (el: T) => any) => JsLinqGroup<T>;

 

        //Join

        join?: (otherData: T[]) => JsLinq<T>;

 

        //ToList

        toList?: () => T[];

 

        //Intersect

        intersect?: (otherData: T[], comparisonField?: (el: T) => T) => JsLinq<T>;

 

        //Distinct

        distinct?: () => JsLinq<T>;

 

        //OrderBy

        orderBy?: (sortField: (el : T) => any) => JsLinq<T>;

 

        //OrderByDescending

        orderByDescending?: (sortField: (el: T) => any) => JsLinq<T>;

 

        //SelectMany

        selectMany?: <Q>(projection: (el: T) => Q[]) => JsLinq<Q>;

 

        //SingleOrDefault

        singleOrDefault?: (condition?: (el: T) => boolean) => T;

 

        //FirstOrDefault

        firstOrDefault?: (condition?: (el: T) => boolean) => T;

 

        //LastOrDefault

        lastOrDefault?: (condition?: (el: T) => boolean) => T;

 

        //Any

        any?: (condition?: (el: T) => boolean) => boolean;

 

        //All

        all?: (condition?: (el: T) => boolean) => boolean;

 

        //Count

        count?: () => number;

 

        //Skip

        skip?: (quantity: number) => JsLinq<T>;

 

        //Take

        take?: (quantity: number) => JsLinq<T>;

 

        //Max

        max?: (projection?: (el: T) => any) => T;

 

        //Min

        min?: (projection?: (el: T) => any) => T;

 

        //Remove

        remove?: (element: T) => JsLinq<T>;

 

        //Subtract

        subtract?: (otherData: T[], comparisonField?: (el : T) => T) => JsLinq<T>;

 

        //Sum

        sum?: (projection?: (el: T) => number) => number;

 

        //Average

        average?: (projection?: (el : T) => number) => number;   


JSON数据的修改:由于JS对象赋值数组之后,对象直接指向原来数组的地址。直接修改JS对象,原数组的值就会对应修改

==============================================================================================

6.5更新:具体的使用方法举例

1、where

const tEq = jslinq(Equipment).where(p=>p['e_id']==pE['goods_id']).firstOrDefault();

2、remove

const singLeObj = jslinq(myPackage).where(p=>p['id']==this.packageObj['id']).singleOrDefault();

Global.playerControl.package = jslinq(myPackage).remove(singLeObj).toList();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值