簡體   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