同时创建 属性 和增加值
Simultaneously creating property and incrementing value
我是新手,所以如果这是一个愚蠢的问题,我深表歉意,我很抱歉在我的问题前先道歉。
我正在尝试计算数组中的值并将它们分类到以每个值命名的属性中。
这是我写的原代码:
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);
但它只是出现了一个错误。
我做错了什么?
如果 属性 未定义,您可以使用 ||
运算符得到零,然后将其加 1 并存储在 属性:
reps[num] = (reps[num] || 0) + 1;
你在第二个代码中得到一个错误,因为你在 sortReps
中使用 series
,但是参数是名称 ser
,所以它是未定义的。此外,您创建了一个全局变量 num
并使用了未定义的 nume
,并且它缺少右括号。无论如何,sortReps
函数除了不起作用之外,与 createReps
的作用相同,因此拥有两个函数不会改变任何东西。添加更多的 NaN
仍然会给你 NaN
.
在 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 }
当该位置的原始值为 undefined
时,您无法执行 reps[num]++
。您将得到 NaN
(不是数字)。您需要这样做:
reps[num] = (reps[num]||0)+1;
它将使用现有值,或者当项目未定义时为 0,然后向其添加 1。
我是新手,所以如果这是一个愚蠢的问题,我深表歉意,我很抱歉在我的问题前先道歉。
我正在尝试计算数组中的值并将它们分类到以每个值命名的属性中。
这是我写的原代码:
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);
但它只是出现了一个错误。
我做错了什么?
如果 属性 未定义,您可以使用 ||
运算符得到零,然后将其加 1 并存储在 属性:
reps[num] = (reps[num] || 0) + 1;
你在第二个代码中得到一个错误,因为你在 sortReps
中使用 series
,但是参数是名称 ser
,所以它是未定义的。此外,您创建了一个全局变量 num
并使用了未定义的 nume
,并且它缺少右括号。无论如何,sortReps
函数除了不起作用之外,与 createReps
的作用相同,因此拥有两个函数不会改变任何东西。添加更多的 NaN
仍然会给你 NaN
.
在 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 }
当该位置的原始值为 undefined
时,您无法执行 reps[num]++
。您将得到 NaN
(不是数字)。您需要这样做:
reps[num] = (reps[num]||0)+1;
它将使用现有值,或者当项目未定义时为 0,然后向其添加 1。