首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将对象数组转换为键失败

将对象数组转换为键失败
EN

Stack Overflow用户
提问于 2017-08-30 18:04:50
回答 2查看 31关注 0票数 1

我有这样的结构

代码语言:javascript
复制
  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
      }]
    }]

我想把上面的结构转换成这个

代码语言:javascript
复制
[{date: '2018-8-1', iphone: 12, samsung: 10}, {date: '2018-8-2', iphone:5, samsung:9}]

我在下面的尝试有什么问题?

代码语言:javascript
复制
let result = raw.map((obj, i) => {
   return {
       date: obj.date,
       [obj.devices.map(innerObj => innerObj.name)]: 'test'
   }
})

https://jsfiddle.net/q74x8106/

或者我不应该将map用于内循环?我迷路了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-30 18:10:47

您可以映射外部数组,并使用Object.assignspread syntax ...构建一个新对象。

代码语言:javascript
复制
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 }] }],
    result = raw.map(({ date, devices }) =>
        Object.assign({ date }, ...devices.map(d => ({ [d.name]: d.device_age }))));
    
console.log(result);
代码语言:javascript
复制
.as-console-wrapper { max-height: 100% !important; top: 0; }

票数 2
EN

Stack Overflow用户

发布于 2017-08-30 18:20:19

代码语言:javascript
复制
let result = raw.map((obj, i) => {
    let newObj = {};
    obj.devices.forEach(obj => {
        newObj[obj.name] = obj.device_age

    });
    return {
        date: obj.date,
        ...newObj
    }
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45957490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档