[英]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.assign
与Array#map
和spread语法一起使用...
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.