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);