【问题标题】:Incrementing a value in an object增加对象中的值
【发布时间】:2021-06-04 15:36:17
【问题描述】:

我正在寻找给定数组的模式。到目前为止,我采取的方法是将数组减少为对象键,并将每个键值设置为零。现在我想再次扫描数组,并为数组中每次出现的元素将值加 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]));

返回:

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

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

感谢任何指导。仍然掌握事情的窍门,欢迎任何建议或反馈。谢谢!

【问题讨论】:

  • 应该是if (key === arr[i]) {
  • 这似乎阻止了它增加任何数字。当我从key 中删除reducer 时,输出更改为{ '0': 0, '1': 0, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0, '9': 0 }
  • 键是一个字符串,所以你需要使用一元+parseInt等将它的大小写为一个数字...因为你使用严格比较===。跨度>
  • 哦,是的,错过了,你可以改用==,但最好是明确的
  • 谢谢你们!这对我来说更有意义了。感谢您的指导!

标签: javascript arrays loops javascript-objects increment


【解决方案1】:

代码中的错误(如 @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]));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多