簡體   English   中英

從 Array.prototype.map() 返回不一致

[英]Returning from Array.prototype.map() is not consistent

我正在嘗試從以下位置獲取此 output ['1', '12', '123']

   getSubstrings('123');

   function getSubstrings(string) {
      let array = string.split('');
      let subarray = [];
      return array.map(element => {
        subarray.push(element);
        console.log(subarray)       //this gets me ['1'], then ['1','2'] ...
        return subarray;            //but this is not returning the same as in console.log(subarray)   
      });
      
    }

我知道我可以通過將.join('')添加到subarray的末尾來獲得我想要的結果。 我的問題不是關於如何獲得['1', '12', '123']但是,為什么返回與控制台上輸出的子數組相同的子數組會導致[[1','2','3'], ['1','2','3'], ['1','2','3']]而不是[[1], [1,2], [1,2,3]]很奇怪,console.log(subarray) 中的 output 與填充在 the.map() 中的返回子數組不同我在這里遺漏了什么嗎? 提前致謝。

問題是子數組在每個 map '迭代'中都在變化,因為您沒有創建新的子數組,只是將相同的引用傳遞給返回。 它將改變所有三種情況。

首先,它返回[1] ,然后返回[1,2]並將第一個更改為[1,2] 最后一個元素也是如此。 最后,您將擁有一個由相同引用(子數組)的三個副本組成的數組。

通過擴展運算符修復它

 function getSubstrings(string) { let array = string.split(''); let subarray = []; return array.map(element => { subarray.push(element); return [...subarray].join(""); // join to get the desired output }); } console.log(getSubstrings("123"))

請注意,子數組在每次迭代中都會被修改,而不是創建新的子數組。 所以實際上發生的是你傳遞了完全相同的引用來返回,因此導致所有結果都發生了變化。

我建議將其重構為使用 forEach,如下所示:

 const arr = getSubstrings('123'); function getSubstrings(string) { let array = string.split(''); let mainArray = []; let cur = ''; array.forEach(x => { cur += x; mainArray.push(cur); }) return mainArray; } console.log(arr)

暫無
暫無

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

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