繁体   English   中英

JS foreach循环更新数组元素

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM