比如你的配置表根据Id拿到配置表的其中一个字段这个字段是一个 list
字段一:
let list1 = [10,20,30,40,50,60,70,80,90,100];
然后其中也有两个字段也是存在这个id里面另外的两个字段也是数组形式
字段二:
let list2 = [100,200,300,400,500,600,700,800,900,1000];
字段三:
let list3 = [1000,2000,3000,4000,5000,6000,7000,8000,9000,100000];
现在有一个需求,服务器会下发当前等级,当前等级就代表上面三个字段的下标索引,由于后端是从 1 开始的,前端数组是从 0 开始的,现在有几个问题你要拿到数据
问题一:怎么根据服务器下发的等级返回当前下标的索引?
问题二:怎么遍历配置表根据 Id 获取上面三个字段的长度?
问题三:比如我知道字段 3 下发的每一个下标索引,怎么去对应字段二或者字段一拿到当前的索引值出来?
回答第一个问题:
比如服务器下发的 let serverLv = 0;那么这个 0 就代表数组长度的第一个,如果你想拿列表 list 的下标对应等级你可以这样子实现:
//调用这个函数方法传 Id 和等级,为什么要传 Id,因为要从配置表找到这个 Id 然后通过这个 Id 去找到这个列表的字段,那为什么还要传等级呢,因为这个等级是服务器下发的,当你升级的时候你要对界面上去做刷新处理所以两个参数不可少
private _cfglist1Num(actID:number,lv:number) {
let cfg = TS_HammerAct.Get(actID);
let list1Num = cfg.list1[lv];
return list1Num;
}
//通过传 Id 和等级就可以获取配置表的下标索引对应的值了(注意这里看服务器是下发 0 还是 1 如果是 1 那么你这个要减去1 ---->cfg.list1[lv -1];要这样子写 )
let cfgListIdxNum = TiangongBaoHammerMgr.Ins()._cfglist1Num(id, lv);
let cfg1 = cfgListIdxNum;//这样子就可以回答问题一了的,就是简单的获取数组下标的索引
//如果你没有这种需求的话你是直接想获取下标索引那么你可以这样子做
let cfg1 = cfg.list1[serverLv];//即可
回答问题二:
这个问题比较简单,通过 Id 就可以获取上面的字段 一、二、三的数组长度,如下做法:
let hammerActCfg = TS_HammerAct.Get(actID);
let list1Arrays = hammerActCfg.list1.length;//获取字段一的长度
let list2Arrays = hammerActCfg.list2.length;//获取字段二的长度
let list3Arrays = hammerActCfg.list3.length;//获取字段三的长度
回答问题三:
首先回答这个问题之前,你需要知道的知识点有要明白 indexOf 的作用是什么
比如我知道 list2 的长度是每一次都会下发对应的索引,那我怎么知道通过 List2去找到对应的 list1 的下标索引呢?请看下面的代码
let hammerActCfg = TS_HammerAct.Get(actID);
let list2Idx = 100;//这个比如你是知道的,
let list1Indx = hammerActCfg.list1[hammerActCfg.list2.indexOf(list2Idx)];//那么这个就可以通过 list2 下发每次数组的索引去找到 list1 下标的索引了,就可以实现这个位置的对等找出 list1 的 index(Idx) 的值了,反之如果你想通过 list1 去找到 list3 的值如下(写法是一样的)
let list1Idx = 10;//假设每次下发下标索引你是知道的,这里假设下发第一个索引的话
let list3Indx = hammerActCfg.list3[hammerActCfg.list1.indexOf( list3Idx)];//通过传list1Idx 下标知道的第一个就可以找到 list3Index对应的下标索引的值了;
总结:1、这是数组的基础知识的考察,这种需求一般是做充值一组一组去解锁根据后端返回的等级去解锁当前的值获取的,前端拿到后端的等级去找配置表做对应的事情;
2、这种基础的话,多写多想就好,都比较简单,值得注意的是,后端和前端的下标索引不一样这个要注意,前端要减去 1 看什么情况来处理就好啦~