簡體   English   中英

ES6將對象數組映射到數組

[英]ES6 map array of objects to array

有一系列對象

const data = [{
    "name": "08/20/2018",
    "id": "name_1"
}, {
    "name": "12/23/2018",
    "id": "name_2"
}]

我想映射這個對象數組以獲得數組

["Date 1","08/20/2018","Date 2","12/23/2018"]

我正在嘗試使用.map()

data.map((d, i) => 
 `${'Date ' + i}`
  d.name
)];

但不能使用第一個(d)參數映射名稱。

由於輸入項和輸出數組項不是一對一的,因此您將無法使用.map 請使用reduce代替:

 const data = [{ "name": "08/20/2018", "id": "name_1" }, { "name": "12/23/2018", "id": "name_2" }]; const output = data.reduce((a, { name }, i) => { a.push('Date ' + (i + 1), name); return a; }, []); console.log(output); 

.flatMap

 const data = [{ "name": "08/20/2018", "id": "name_1" }, { "name": "12/23/2018", "id": "name_2" }]; const output = data.flatMap(({ name }, i) => (['Date ' + (i + 1), name])); console.log(output); 

(請注意,由於數組是零索引的,因此如果要使輸出數組中的第一項從1而不是0開始,則必須使用i + 1 ,而不是i

嘗試結合使用mapflatmap方法以獲得所需的結果:

 const data = [{ "name": "08/20/2018", "id": "name_1" }, { "name": "12/23/2018", "id": "name_2" }]; const result = data.map((s, i)=> [`Date ${i}`, s.name]).flatMap(f=> f); console.log(result) 

或使用flat方法:

 const data = [{ "name": "08/20/2018", "id": "name_1" }, { "name": "12/23/2018", "id": "name_2" }]; const result = data.map((s, i)=> [`Date ${i}`, s.name]).flat(1); console.log(result) 

您無法使用map,因為該方法會產生一個具有與原始項相同數量的項的新數組。

但是,您可以使用flatMap (在支持的情況下)實現所需的結果:

data.flatMap(({name}, i) => [`Date ${i + 1}`, name]);
console.log(data) // [ "Date 1", "08/20/2018", "Date 2", "12/23/2018" ]

基本上flatMap就像先調用map然后再調用flat一樣 因此,如果從回調函數中我們為每個項目返回一個數組,則此數組在返回之前將被展平。

相反[[ "Date 1", "08/20/2018"], ["Date 2", "12/23/2018"]]會生成常規map調用[[ "Date 1", "08/20/2018"], ["Date 2", "12/23/2018"]]

使用ES2019 Array.flat一行答案:

data.map((item,index)=>([`Date${index+1}`,item.name])).flat();

但是我認為,當有大量數據時,它並沒有得到優化。

我很欣賞上面的答案,但是如果您仍然喜歡使用.map()方法來完成工作,則可以做到。

只是將concat()方法與map()方法一起使用。 讓我們看看如何。

我使用了...data,map()語句,其中...用於數組解構。 可以在https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#Array_destructuring上找到更多信息。

const data = [
    {
        "name": "08/20/2018",
        "id": "name_1"
    }, 
    {
        "name": "12/23/2018",
        "id": "name_2"
    }
]

output = new Array() // or just []

output = output.concat(...data.map((obj, index) => [`Date ${index + 1}`, obj.name]))

console.log(output)
// [ 'Date 1', '08/20/2018', 'Date 2', '12/23/2018' ]

屏幕截圖

在此處輸入圖片說明

暫無
暫無

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

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