2 回答

TA貢獻1801條經(jīng)驗 獲得超16個贊
對于 MapReduce 來說,這似乎是一項相當簡單的工作。以下函數(shù)接受數(shù)組和選擇器參數(shù)。選擇器參數(shù)傳遞給映射以檢索要計數(shù)的項目。Reduce 用于通過從空對象文字開始并在每次傳遞時遞增給定鍵的值來累積結(jié)果。
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條經(jīng)驗 獲得超7個贊
您可以使用一個簡單的循環(huán),通過調(diào)用回調(diào)獲取鍵,并將鍵/值對分配給結(jié)果對象:
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]));
添加回答
舉報