[英]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
)
嘗試結合使用map
和flatmap
方法以獲得所需的結果:
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.