JS:由对象构成的数组如何合并数据
场景如下,在JSON文件中某个key的value为数组,向这个数组插入数据,最后前端得到此数组的数据如下(具体场景参考游戏内获取物品):
const data = [
{ id: 1, name: '村头霸主李狗蛋', num: 10 },
{ id: 1, name: '村头霸主李狗蛋', num: 20 },
{ id: 10, name: '十里红娘张翠花', num: 25 },
{ id: 500, name: '保家卫国周打仗', num: 4 },
{ id: 20, name: '相亲狂魔张小培', num: 52 },
{ id: 5, name: '职业法师刘海柱', num: 5 },
{ id: 20, name: '相亲狂魔张小培', num: 3 }
];
现在要把ID一样的列合并成一条,num相加,,,(代码要兼容ES5)。起初想的是迭代循环,foreach试了很多遍发现不行,走进死胡同了,越陷越深。等找到办法以后,觉得自己之前是真的憨憨:
var trans = function(v){
var arr = [];
var list = [];
for(var i=0; i< v.length; i++){ if( list.indexOf(v[i].id) > -1){
arr[list.indexOf(v[i].id)].num += v[i].num;
}else{
list.push(v[i].id);
arr.push(v[i]);
}
}
return arr;
}
大致说一下思路:
创建一个新数组 arr,用来保存需要的数据。
创建一个新数组 list,用来保存arr里的id序列。
循环源数据,查看每条数据中的id是否在list里出现过。
如果出现过,则把当前数据的num加到 list对应的位置。
如果没出现,把当前数据插入到arr。
最后输出 arr。
----- 嘤嘤嘤 ------
写循环写成了憨憨,脑子一片混沌的时候,可以适当休息一下。有女朋友的做做运动,没女朋友的打打游戏,过会再来写效果会更好!!!
本文标签: JS数组对象