[英]JS foreach loop to update an array element
我目前正在学习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);
这是因为在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
专门用于创建新数组,在提供的数组的每个元素上运行一个函数。
另请参见此处的讨论foreach和map之间是否有区别?
在您的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;
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.