Javascript 将对象数组转换为键失败
我有这个结构Javascript 将对象数组转换为键失败,javascript,ecmascript-6,Javascript,Ecmascript 6,我有这个结构 const raw = [{ date: '2018-8-1', devices: [{ id: 1, name: 'iphone', device_age: 12 }, { id: 2, name: 'samsung', device_age: 10 }] }, { date: '2018-8-2',
const raw = [{
date: '2018-8-1',
devices: [{
id: 1,
name: 'iphone',
device_age: 12
}, {
id: 2,
name: 'samsung',
device_age: 10
}]
}, {
date: '2018-8-2',
devices: [{
id: 1,
name: 'iphone',
device_age: 5
}, {
id: 2,
name: 'samsung',
device_age: 9
}]
}]
我想把上面的结构变成这个
[{date: '2018-8-1', iphone: 12, samsung: 10}, {date: '2018-8-2', iphone:5, samsung:9}]
我下面的尝试有什么问题
let result = raw.map((obj, i) => {
return {
date: obj.date,
[obj.devices.map(innerObj => innerObj.name)]: 'test'
}
})
或者我不应该在内部循环中使用map?我迷路了。您可以映射外部阵列,并使用和构建一个新对象
const raw=[{date:'2018-8-1',devices:[{id:1,name:'iphone',device_age:12},{id:2,name:'samsung',device_age:10}]},{date:'2018-8-2',devices:[{id:1,name:'iphone device_age:5},{id:2,name:'samsung',device u age:9}]},
结果=raw.map({date,devices})=>
Object.assign({date},…devices.map(d=>({[d.name]:d.device_age}));
控制台日志(结果)代码>
.as console wrapper{max height:100%!important;top:0;}
可能重复的obj.devices.map
返回一个数组,计算出的属性名将强制转换为字符串或符号。因为Object.assign
将对象合并到单个对象。您可以将设备作为随时间推移的对象获取,并且只能返回一个对象。
let result = raw.map((obj, i) => {
let newObj = {};
obj.devices.forEach(obj => {
newObj[obj.name] = obj.device_age
});
return {
date: obj.date,
...newObj
}
})