【问题标题】:Count the occurrences of each element inside an array using reduce [duplicate]使用reduce计算数组中每个元素的出现次数[重复]
【发布时间】:2019-09-24 05:26:00
【问题描述】:

使用reduce计算数组中每个元素的出现次数。 我的代码错了!

我的代码:

function countOccurrences(arr) {
  return arr.reduce(function(a, b){
    var count = 0;
    for(var i = 0; i < arr.length; i++){
      if (arr[i] == b) {
        return count + 1;
      }
    }
  }, '');
}

console.log(countOccurrences(['a', 'b', 'c', 'b', 'a']));

预期:

// { 
//   a: 2, 
//   b: 2, 
//   c: 1 
// }

非常感谢!

【问题讨论】:

标签: javascript


【解决方案1】:

你犯了两个错误:

  • 通过将'' 作为第二个参数传递,您可以将a 的初始值设置为空字符串。
  • 您无需在reduce() 内再次循环。 reduce() 它遍历所有元素。

function countOccurrences(arr) {
  return arr.reduce(function(a, b){
    a[b] = a[b] + 1 || 1
    return a;
  }, {});
}
console.log(countOccurrences(['a', 'b', 'c', 'b', 'a']));

使用箭头函数的联机将是

const count = (arr) => arr.reduce((ac,a) => (ac[a] = ac[a] + 1 || 1,ac),{})

console.log(count(['a', 'b', 'c', 'b', 'a']));

【讨论】:

    【解决方案2】:

    您可以使用reduce 循环遍历数组并将其汇总为一个对象。将累加器作为对象 {} 启动。检查每个字母是否作为累加器中的属性存在。如果不是,则初始化为 0,然后添加 1。

    function countOccurrences(arr) {
      return arr.reduce((a, b) => (a[b] = (a[b] || 0) + 1, a), {});
    }
    
    let result = countOccurrences(['a', 'b', 'c', 'b', 'a']);
    console.log(result);

    【讨论】:

      【解决方案3】:

      在 reduce 中传递一个空对象作为初始累加器。在此对象中检查是否存在 relevenat 键。如果是,则增加计数,否则创建键并为其赋值

      function countOccurrences(arr) {
      
        return arr.reduce(function(acc, curr) {
          if (acc[curr]) {
            acc[curr] += 1;
          } else {
            acc[curr] = 1
          }
          return acc;
      
        }, {})
      
      }
      
      console.log(countOccurrences(['a', 'b', 'c', 'b', 'a']));

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多