簡體   English   中英

使用es6 map將數組轉換為對象

[英]turning an array into an object using es6 map

我目前有以下數據結構:

const bar = [
    {id:1, version:0, name:"test name A"},
    {id:2, version:0, name:"test name B"},
    {id:3, version:0, name:"test name C"}
];

我需要把它變成這個:

const foo = {
    1:{id:1, version:0, name:"test name A"},
    2:{id:2, version:0, name:"test name B"},
    3:{id:3, version:0, name:"test name C"}
};

我實際擁有的代碼是:

for(let i=0;len = bar.length; i< len;i++){
    foo[bar[i].id]= bar[i];
}

我試過了

bar.map((element,index)=>{
    const temporal = {[index]:element};
    foo = {...foo, temporal};
});

但我迷路了,有什么建議嗎?

你可以使用reduce()Object.assign()

 const bar = [ {id:1, version:0, name:"test name A"}, {id:2, version:0, name:"test name B"}, {id:3, version:0, name:"test name C"} ]; var result = bar.reduce((r, e) => Object.assign(r, {[e.id]: e}), {}); console.log(result) 

您可以將Object.assignArray#mapspread語法一起使用...

 const bar = [{ id: 1, version: 0, name: "test name A" }, { id: 2, version: 0, name: "test name B" }, { id: 3, version: 0, name: "test name C" }], object = Object.assign(...bar.map(o => ({ [o.id]: o }))); console.log(object); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

Array.map返回一個數組,如果你想返回一個對象,你可以使用Array.reduce

 const bar = [ {id:1, version:0, name:"test name A"}, {id:2, version:0, name:"test name B"}, {id:3, version:0, name:"test name C"} ]; var foo = bar.reduce( (a,b,i) => (a[i+1] = b, a), {}); console.log(foo); 

如果您只需要重新格式化數據以將其發送到API,則無需使用Object.assign創建對象的真實克隆

你可以使用reduce ,aka fold或者注入:

const bar = [
    {id:1, version:0, name:"test name A"},
    {id:2, version:0, name:"test name B"},
    {id:3, version:0, name:"test name C"}
];

bar.reduce((obj, e, i) => { obj[e.id] = e; return obj}, {});

另一種方法可能是使用forEach迭代數組,但不會像map那樣返回數組:

let foo = {};
bar.forEach((el, idx) => foo[idx+1] = el)

暫無
暫無

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

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