Javascript forEach()方法-在数组上循环
我对编码一无所知,所以我的问题可能很基本。我想在下面的数组上循环,每当这个数被3整除时,我想加上100。如果没有,请打印号码。我想用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(函
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
overforEach
以及如何打印数字:)我把Tom选为O,因为答案更完整,更好地考虑到OP的实际问题。