我是新手,所以如果这是一个愚蠢的问题,我深表歉意,并且我会在我的问题前表达歉意。
我正在尝试计算数组中的值并将它们排序到为每个值命名的属性中。
这是我写的原始代码:
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/