我需要使用Javascript / Jquery按键值计算对象数组内部存在的记录数。我在下面解释我的代码。
var arrResult = [{"name":"jim","amount":34,"date":"11/12/2015"},
{"name":"carl","amount":120.11,"date":"11/12/2015"},
{"name":"jim","amount":45,"date":"12/01/2015"},
{"name":"stacy","amount":12.00,"date":"01/04/2016"},
{"name":"stacy","amount":34.10,"date":"01/04/2016"},
{"name":"stacy","amount":44.80,"date":"01/05/2016"}
];
以上是我的对象数组。在这里,我需要根据相同的name
值来计算记录数,并在下面给出我的预期输出。
var output=[
{"name":"jim","count":2},
{"name":"carl","count":1},
{"name":"stacy","count":3}
]
答案 0 :(得分:2)
您可以使用reduce
:
var arrResult = [{"name":"jim","amount":34,"date":"11/12/2015"},
{"name":"carl","amount":120.11,"date":"11/12/2015"},
{"name":"jim","amount":45,"date":"12/01/2015"},
{"name":"stacy","amount":12.00,"date":"01/04/2016"},
{"name":"stacy","amount":34.10,"date":"01/04/2016"},
{"name":"stacy","amount":44.80,"date":"01/05/2016"}
];
var output = arrResult.reduce((acc, curr) => {
if (!acc.some(({ name }) => name == curr.name)) {
acc.push({ name: curr.name, count: 1 });
} else {
acc.find(({ name }) => name == curr.name).count++;
}
return acc;
}, []);
console.log(output);
ES5语法:
var arrResult = [{"name":"jim","amount":34,"date":"11/12/2015"},
{"name":"carl","amount":120.11,"date":"11/12/2015"},
{"name":"jim","amount":45,"date":"12/01/2015"},
{"name":"stacy","amount":12.00,"date":"01/04/2016"},
{"name":"stacy","amount":34.10,"date":"01/04/2016"},
{"name":"stacy","amount":44.80,"date":"01/05/2016"}
];
var output = arrResult.reduce(function(acc, curr) {
if (!acc.some(function(e) {
return e.name == curr.name;
})) {
acc.push({ name: curr.name, count: 1 });
} else {
acc.find(function(e) {
return e.name == curr.name;
}).count++;
}
return acc;
}, []);
console.log(output);
答案 1 :(得分:0)
您可以结合使用Object.values()和Array.prototype.reduce():
const arrResult = [{"name":"jim","amount":34,"date":"11/12/2015"},{"name":"carl","amount":120.11,"date":"11/12/2015"},{"name":"jim","amount":45,"date":"12/01/2015"},{"name":"stacy","amount":12.00,"date":"01/04/2016"},{"name":"stacy","amount":34.10,"date":"01/04/2016"},{"name":"stacy","amount":44.80,"date":"01/05/2016"}];
const output = Object.values(arrResult.reduce((a, c) => {
a[c.name] = a[c.name] ? {name: c.name, count: ++a[c.name].count} : {name: c.name, count: 1};
return a;
}, {}));
console.log(output);
.as-console-wrapper { max-height: 100% !important; top: 0; }