簡體   English   中英

為什么這個映射函數不改變原始數組中的值?

[英]Why does this map function not mutate the values in the original array?

這是有問題的代碼:

const array = [
  1, 2, 3
]

array.map(item => {
  item = item + 1
})

console.log(array)

我以為map方法中的item (第一個)參數是對數組中原始項目的引用,並且直接對其進行更改會更改該第一個數組的內容……不是嗎?

map函數返回一個新數組,它不會更改原始數組。

item是這里的局部變量,在箭頭函數 item => {...} 分配item = item + 1不會更改原始元素,而是會更改item局部變量。

如果您想更改元素,那么forEach函數會更有效,因為它不會創建新的數組:

array.forEach((item, index) => {
    array[index] = item + 1;
});

您的數組包含基本類型元素(此處為整數)。 基本類型的變量不能通過其引用進行突變。 例如,如果數組的元素是對象,則可以進行突變,如下所示:

 var array = [{val: 1}, {val: 2}, {val: 3}]; array.map(item => {item.val = item.val + 1}); console.log(array); 

Mozilla說;

map()方法創建一個新數組,並在調用數組中的每個元素上調用提供的函數。

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/map

因此,map函數不會使數組的值發生變化。

我知道您不想這樣做,但是您可以使用以下命令:

 const array = [ 1, 2, 3 ] array.map((item, k) => { array[k] = item + 1 }) console.log(array) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM