我目前正在学习JavaScript。 我尝试使用foreach循环来更新数组中的元素。 但问题是“console.log”结果总是和以前一样。 下面是代码。 任何人都可以帮忙解决问题吗?
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 addNum = function(element,index,array){
if(element%3===0)
{
element += 100;
}
};
test.forEach(addNum);
console.log(test);
答案 0 :(得分:4)
那是因为在JavaScript中,参数是按值传递的,而不是通过引用传递的
所以改变element
参数什么都不做。
在您的情况下,最好使用map
,如下所示:
var addNum = function(element,index,array){
if(element%3===0)
{
return element + 100;
}
return element
};
const result = test.map(addNum);
console.log(result);
如果你真的需要使用forEach
- 你可以这样做:
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 addNum = function(element,index,array){
if(element%3===0)
{
array[index] += 100;
}
};
test.forEach(addNum);
console.log(test);
但在我看来,这是一种不好的做法
forEach
用于对数组中的每个元素执行某些操作而不更改它,但map
专门用于创建在所提供数组的每个元素上运行函数的新数组。
另请参阅此处的讨论Is there a difference between foreach and map?
答案 1 :(得分:2)
在addNum
函数中,element
只是一个参数。修改它时,只修改函数内部的值,而不是数组中的实际元素。
要修改数组,您需要定位元素:
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 addNum = function(element, index, array) {
if (element % 3 === 0) {
array[index] = element + 100;
}
};
test.forEach(addNum);
console.log(test);
请注意,在JavaScript中,您可以直接将匿名函数传递给forEach()
:
test.forEach(function(element, index, array) {
if (element % 3 === 0) {
array[index] = element + 100;
}
});