javascript - 同时创造属性(property)和增值

标签 javascript object properties

我是新手,所以如果这是一个愚蠢的问题,我深表歉意,并且我会在我的问题前表达歉意。

我正在尝试计算数组中的值并将它们排序到为每个值命名的属性中。

这是我写的原始代码:

var reps = {};

function sortReps(series){
  var num;
  for (var i=0; i<series.length; i++) {
    num = series[i];
    reps[num]++;
  }
}

var arr = [1,3,3,5,7,9,9,9];

sortReps(arr);

console.log(reps);

理想情况下,控制台会打印 { 1:1, 3:2, 5:1, 7:1, 9:3 }

但是它打印 { 1:南, 3:南, 5:南, 7:南, 9: 南 }

对我来说奇怪的是,如果我不包含“++”,则根本不会创建属性。

我已经确定,如果属性已经有值,只要它不是未定义的,++ 就可以正常工作。但是,我显然不能在每次循环时都将值设置为 0,否则它将无法用作计数器。

我什至尝试添加另一个函数来在创建属性后将值添加到属性中:

var reps = {};

function createReps(series){
  var num;
  for (var i=0; i<series.length; i++) {
    num = series[i];
    reps[num]++;
  }
}

function sortReps(ser){
  var nume;
  for (var j=0; j<series.length; j++) {
  num = series[j];
  reps[nume]++;
}

var arr = [1,3,3,5,7,9,9,9,42];

createReps(arr);
sortReps(arr);

console.log(reps);

但它只是出现了一个错误。

我做错了什么?

最佳答案

在 for 循环中检查 reps[num] 是否已定义(如果未将其声明为 0)。

var reps = {};

function sortReps(series){
  var num;
  for (var i=0; i<series.length; i++) {
    num = series[i];
    if(reps[num] === undefined)reps[num]=0;
    reps[num]++;
  }
}

var arr = [1,3,3,5,7,9,9,9];

sortReps(arr);

console.log(reps); // { 1: 1, 3: 2, 5: 1, 7: 1, 9: 3 }

关于javascript - 同时创造属性(property)和增值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29616245/

相关文章:

ios - 为什么我不能直接设置一些类属性?

jquery - 尝试检查文本字段是否有文本,然后根据检查启用/禁用提交

javascript - 如何使用 AWS SDK for S3 修复 JavaScript Promise?

javascript - 如何创建下拉列表来选择月份和年份

javascript - 500 错误 : Failed to lookup view "index" in views directory

java - 根据字符串标识符检查对象字段

javascript - 是否有一个 ES6 函数会返回一个包含属性更改的对象?

javascript - Jquery 在复选框上显示 div

javascript - 过滤和映射后如何获取用户ID

javascript - 引用对象数组中的对象标题