簡體   English   中英

在箭頭函數中返回擴展數組

[英]Return spreaded array in arrow function

假設我有這種類型的數組:

[ [1, 2], [3, 4] ]

我需要做的是在更高層上獲取嵌套元素,使其看起來像:

[1, 2, 3, 4]

我正在嘗試以功能方式實現這一目標,因此代碼如下所示:

const arr = [ [1, 2], [3, 4] ]
const f = Array.from(arr, x => ...x)

但這帶來了Unexpected token ...錯誤。 那么正確的方法是什么?

您可以使用Array的flat方法:

 const inp = [ [1, 2], [3, 4] ]; console.log(inp.flat()); 

在您的情況下,spread語法不是您可以通過這種方式使用的運算符,這就是錯誤的原因。

正如@MarkMeyer在注釋中正確指出的那樣,Edge和Internet Explorer尚不支持該flat 在這種情況下,您可以使用reduce來尋求解決方案:

 const inp = [[1,2], [3,4]]; console.log(inp.reduce((acc, val) => acc.concat(...val), [])); 

Array.from將為傳入的數組中的每個項目生成一個項目。它查看傳入的iterable的length ,並迭代從0開始的索引。因此,無論您在回調中做什么(假設它是有效的),如果傳入兩個元素的數組,則將得到一個長度為2的輸出數組。

reduce()可能是一個更好的選擇:

 let arr = [ [1, 2], [3, 4] ] let flat = arr.reduce((arr, item) => [...arr, ...item]) console.log(flat) 

您可以為該數組創建一個迭代器,並通過使用另一個用於嵌套數組的生成器來擴展該數組。

 function* flat() { for (var item of this.slice()) { if (Array.isArray(item)) { item[Symbol.iterator] = flat; yield* item } else { yield item; } } } var array = [[1, 2], [3, 4, [5, 6]]]; array[Symbol.iterator] = flat; console.log([...array]); 

暫無
暫無

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

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