2 回答
TA贡献1801条经验 获得超15个赞
对于 MapReduce 来说,这似乎是一项相当简单的工作。以下函数接受数组和选择器参数。选择器参数传递给映射以检索要计数的项目。Reduce 用于通过从空对象文字开始并在每次传递时递增给定键的值来累积结果。
function countBy(ary, selector) {
return ary.map(selector)
.reduce((acc, cur) => { acc[cur] = (acc[cur] || 0) + 1; return acc; } ,{});
// fancy spread version:
// .reduce((acc, cur) => ({ ...acc, [cur]: (acc[cur] || 0) + 1 }) ,{});
}
// view console.log for result
console.log(countBy([[150, 1], [300, 2], [430, 1]], x => x[1]));
TA贡献1852条经验 获得超7个赞
您可以使用一个简单的循环,通过调用回调获取键,并将键/值对分配给结果对象:
function countBy(data, getKey) {
let count = {};
for (let row of data) {
let key = getKey(row);
count[key] = (count[key] || 0) + 1;
}
return count;
}
const data = [[150, 1], [300, 2], [430, 1]]
console.log(countBy(data, row => row[1]));
添加回答
举报