Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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 forEach()方法-在数组上循环_Javascript_Loops - Fatal编程技术网

Javascript forEach()方法-在数组上循环

Javascript forEach()方法-在数组上循环,javascript,loops,Javascript,Loops,我对编码一无所知,所以我的问题可能很基本。我想在下面的数组上循环,每当这个数被3整除时,我想加上100。如果没有,请打印号码。我想用forEach()方法实现这一点。这是我的代码,但当我想要打印它时,它会显示“未定义”我做错了什么 var测试=[12929,11,31991000,7,1,24,37,4, 19, 300, 3775, 299, 36, 209, 148, 169, 299, 6, 109, 20, 58, 139, 59, 3, 1, 139]; test.forEach(函

我对编码一无所知,所以我的问题可能很基本。我想在下面的数组上循环,每当这个数被3整除时,我想加上100。如果没有,请打印号码。我想用forEach()方法实现这一点。这是我的代码,但当我想要打印它时,它会显示“未定义”我做错了什么

var测试=[12929,11,31991000,7,1,24,37,4,
19, 300, 3775, 299, 36, 209, 148, 169, 299,
6, 109, 20, 58, 139, 59, 3, 1, 139];
test.forEach(函数(num){
如果(数值%3==0){
返回num+=100;
}否则{
返回num;
}
console.log(num);
})
摆脱这些陈述:

return语句结束函数执行并指定要执行的值 返回给函数调用方

因此,它永远不会到达
控制台.log
行(这是他们所说的,因为没有可能的路径):

var测试=[12929,11,31991000,7,1,24,37,4,
19, 300, 3775, 299, 36, 209, 148, 169, 299,
6, 109, 20, 58, 139, 59, 3, 1, 139
];
test.forEach(函数(num){
如果(数值%3==0){
num+=100;
}
console.log(num);

})
问题在于
return
关键字会立即停止该函数,因此您不会继续前进。因为它本身没有返回任何东西,所以关键字是非常无用的。您只需将其移除,即可获得所需的行为:

var测试=[12929,11,31991000,7,1,24,37,4,
19, 300, 3775, 299, 36, 209, 148, 169, 299,
6, 109, 20, 58, 139, 59, 3, 1, 139];
test.forEach(函数(num){
如果(数值%3==0){
num+=100;
}
console.log(num);

})
您应该在此处使用
map
而不是
forEach
,因为
map
将对每个数组项执行提供的函数并返回一个新数组

map()方法创建一个新数组,其中包含对调用数组中的每个元素调用所提供函数的结果

只要更改您当前的代码,它可以是这样的

var test = [12, 929, 11, 3, 199, 1000, 7, 1, 24, 37, 4,
    19, 300, 3775, 299, 36, 209, 148, 169, 299,
    6, 109, 20, 58, 139, 59, 3, 1, 139];

var result = test.map(function(num) {
  if (num %3 === 0) {
    return num + 100; 
  } else {
    return num; 
  }
})
或者,您还可以通过分离事物来进一步改进它

const add100IfDividableBy3 = function (num) {
  return (num % 3 === 0) ? num + 100 : num;
}

const test = [12, 929, 11, 3, 199, 1000, 7, 1, 24, 37, 4, 19, 300, 3775, 299, 36, 209, 148, 169, 299, 6, 109, 20, 58, 139, 59, 3, 1, 139];

const result = test.map(add100IfDividableBy3)

函数
add100IfDividableBy3
使用了所谓的

,您也可以删除那里的
else
语句,因为它不处理
num
;)请注意,这会修改局部变量
num
。它不会修改数组。欢迎使用SO!由于您不熟悉编码,只想快速总结一下您已有的好答案:如果您只是想打印数字,
forEach
工作正常,无需使用
map
。如果要转换数字并在其他地方使用转换后的数字,
map
更合适。您可能还想搜索“不变性”,以了解为什么
map
可能是更好的解决方案。非常感谢!所有的输入都非常有用。我同意,
map
可能是OP在实际情况下需要的,但问题指定了打印数字的需要,这在您的答案中缺失,从而修改了预期结果。也许你可以编辑答案来解释为什么使用
map
over
forEach
以及如何打印数字:)我把Tom选为O,因为答案更完整,更好地考虑到OP的实际问题。