增加对象中的值

Incrementing a value in an object

我正在寻找给定数组的模式。到目前为止,我采用的方法是将数组缩减为对象键,并将每个键值设置为零。现在我想再次扫描数组,并为数组中元素的每次出现将值递增 1。

认为应该可以工作,但是多次出现的键没有递增。所有值都读为 1。

到目前为止我的代码:

const mode = function(arr) {
    const reducer = arr.reduce((accumulator, currentValue) => (accumulator[currentValue] = 0, accumulator), {});
    for (let key in reducer) {
      for (let i = 0; i < arr.length; i++) {
        if (reducer[key] === arr[i]) {
        reducer[key]++;
      }
    }
  }
  return reducer;
};

console.log(mode([6,2,3,4,9,6,1,0,5]));

哪个returns:

{ '0': 1, '1': 1, '2': 1, '3': 1, '4': 1, '5': 1, '6': 1, '9': 1 }

'6': 1 更改为 '6': 2 我缺少什么?

任何指导表示赞赏。仍在掌握事物的窍门,愿意接受任何建议或反馈。谢谢!

您的代码中的错误(如@Pointy 所述)是比较 reducer[key] === arr[i] 应该是 if (key === arr[i]) {。由于您使用的是严格相等 (===),因此您需要将 key 转换为数字,或者改用相等 (==) 运算符。

const mode = function(arr) {
  const reducer = arr.reduce((accumulator, currentValue) => (accumulator[currentValue] = 0, accumulator), {});
  for (let key in reducer) {
    for (let i = 0; i < arr.length; i++) {
      if (+key === arr[i]) {
        reducer[key]++;
      }
    }
  }
  return reducer;
};

console.log(mode([6, 2, 3, 4, 9, 6, 1, 0, 5]));

但是,您正在做一些多余的工作,因为您可以在将数组缩减为对象时计算出现的次数:

const mode = function(arr) {
  return arr.reduce((accumulator, currentValue) => {
    accumulator[currentValue] = (accumulator[currentValue] ?? 0) + 1;
    
    return accumulator;
  } , {});
};

console.log(mode([6,2,3,4,9,6,1,0,5]));