Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 同时创建属性和增加值_Javascript_Object_Properties - Fatal编程技术网

Javascript 同时创建属性和增加值

Javascript 同时创建属性和增加值,javascript,object,properties,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]

我是新手,所以如果这是一个愚蠢的问题,我道歉,我道歉在我的问题前面加上道歉

我试图对数组中的值进行计数,并将它们排序到为每个值命名的属性中

这是我写的原始代码:

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:NaN, 9:NaN }

对我来说奇怪的是,如果我不包括++,属性就永远不会被创建

我已经确定,如果属性已经有一个值,只要它不是未定义的,++就可以正常工作。但是,我显然不能在每次循环时将该值设置为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);
但它只是出现了一个错误

我做错了什么?

如果属性未定义,则可以使用| |运算符获取零,然后向其添加1并存储在属性中:

reps[num] = (reps[num] || 0) + 1;
第二段代码中出现错误,因为在sortReps中使用了series,但参数为names ser,因此未定义。另外,您创建了一个全局变量num,并使用了未定义的nume,它缺少一个右括号。无论如何,除了不起作用之外,sortReps函数与createReps函数的作用相同,因此它不会改变任何东西来拥有两个函数。向NaN添加更多的值仍然会得到NaN。

在for循环中,如果未将reps[num]声明为0,则检查是否定义了reps[num]

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 }
当该位置的原始值未定义时,不能重复[num]++。你得到的不是一个数字。您需要这样做:

reps[num] = (reps[num]||0)+1;

它将使用一个现有的值,如果一个项目未定义,则使用0,然后向其添加1。

序列的值是多少?得到了它。我改变了它,它成功了。谢谢我会支持你的答案,但我的声望不够高。是的,我成功了,谢谢!我会支持你的答案,但我还没有足够高的声誉是的,我只是复制了第一个函数来测试它是否可行,我忘了更改一些变量。我想如果第一个函数设置了属性名,那么第二个函数将定义值,但我现在明白了为什么这不起作用。