关于JSON数组的小Demo,有木有高手


    var arr = [
        {id:1,      username:"EZ",      linkman:"张三"  },
        {id:2,      username:"EZ",      linkman:"张三" },
        {id:3,      username:"EZ",      linkman:"张三" },
        {id:4,      username:"鳄鱼",    linkman:"王五" },
        {id:5,      username:"EZ",      linkman:"李四" },
        {id:6,      username:"盖伦",    linkman:"张三" },
        {id:7,      username:"瑞文",    linkman:"张三"  },
        {id:8,      username:"小鱼人",  linkman:"王五"  },
        {id:9,      username:"小鱼人",  linkman:"王五"  }
    ];

   //将上面的arr 先根据username 去重,保留后面的数据
    //去重后的数据应该为
    var newarr = [
        {id:4,      username:"鳄鱼",    linkman:"王五"   },
        {id:5,      username:"EZ",      linkman:"李四"    },
        {id:6,      username:"盖伦",    linkman:"张三"    },
        {id:7,      username:"瑞文",    linkman:"张三"    },
        {id:9,      username:"小鱼人",  linkman:"王五"    }
    ];

    //最后统计 linkman    出现的次数
    var result = [
        {linkman:"王五", time:"2"},
        {linkman:"李四", time:"1"},
        {linkman:"张三", time:"2"},

    ];


这本质上不是 JSON 数组,而是 JS 的复杂对象,以 username 为 Key 通过一遍遍历完成统计,参考 demo 为:

function sumup(){
   var arr = [
        {id:1,      username:"EZ",      linkman:"张三"  },
        {id:2,      username:"EZ",      linkman:"张三" },
        {id:3,      username:"EZ",      linkman:"张三" },
        {id:4,      username:"鳄鱼",    linkman:"王五" },
        {id:5,      username:"EZ",      linkman:"李四" },
        {id:6,      username:"盖伦",    linkman:"张三" },
        {id:7,      username:"瑞文",    linkman:"张三"  },
        {id:8,      username:"小鱼人",  linkman:"王五"  },
        {id:9,      username:"小鱼人",  linkman:"王五"  }
    ];

    var sumMap = {};
    for(var i=0;i<arr.length;i++){
        var temp = arr[i];
        var username = temp.username;

        //新记录,加入 sumMap 中
        if(sumMap[username] == undefined){
            var anewData = {};
            anewData.linkman = temp.linkman;
            anewData.time = 1;
            sumMap[username] = anewData;
        }else{
            //非新记录,累加
            var lastCount = sumMap[username].time;
            sumMap[username].time=lastCount+1;
        }

        //遍历打印sumMap
        console.log(sumMap);
    }
}

js 的对象可以用做 Map ,以 username 为 map 的 key,存在就累加 time ,不存在就新添加新属性。

let arr = [
    {id:1,      username:"EZ",      linkman:"张三"  },
    {id:2,      username:"EZ",      linkman:"张三" },
    {id:3,      username:"EZ",      linkman:"张三" },
    {id:4,      username:"鳄鱼",    linkman:"王五" },
    {id:5,      username:"EZ",      linkman:"李四" },
    {id:6,      username:"盖伦",    linkman:"张三" },
    {id:7,      username:"瑞文",    linkman:"张三"  },
    {id:8,      username:"小鱼人",  linkman:"王五"  },
    {id:9,      username:"小鱼人",  linkman:"王五"  }
];
// 按username去重
let ts = [];
let flag = 0;
arr.forEach(e => {
    ts.forEach(t => {
        if (t.username === e.username){
            t.id = e.id;
            t.linkman = e.linkman;
            flag = 1;
        }
    });
    if (flag === 0) {
        ts.push(e);
    }
    flag = 0;
});
console.log(ts);

// 统计次数
let rs = [];
let flag1 = 0;
ts.forEach(e => {
    // 首先判断rs是否为null
    if (rs.length === 0) {
        let obj = {};
        obj.linkman = e.linkman;
        obj.time = 1;
        rs.push(obj);
        return;
    }

    rs.forEach( r => {
        if (r.linkman === e.linkman) {
            r.time = r.time + 1;
            flag1 = 1;
        }
    });

    if (flag1 === 0){
        let obj = {};
        obj.linkman = e.linkman;
        obj.time = 1;
        rs.push(obj);
    }
    flag1 = 0;
});

console.log(rs);