徐向博 / Imin.

JS:由对象构成的数组如何合并数据
作者:Imin 时间:2019-08-03 分类: 前端

场景如下,在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数组对象

爱吃大闸蟹: [评论违规,已隐藏] 2019-08-26 08:35