如何仅使用 ES6 替换 Lodash 的 _.countBy?

取下面的数组 const data = [[150, 1], [300, 2], [430, 1]]

有了 Lodash,countBy我就可以做到_.countBy(row => row[1]),它会返回一个像这样的对象{"1": 2, "2":1}。它基本上计算出现次数并将其放入一个对象中。我怎样才能用 ES6 语法做同样的事情?


郎朗坤
浏览 129回答 2
2回答

侃侃尔雅

对于 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 resultconsole.log(countBy([[150, 1], [300, 2], [430, 1]], x => x[1]));

慕姐4208626

您可以使用一个简单的循环,通过调用回调获取键,并将键/值对分配给结果对象: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]));
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript