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
    }
})