首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将键从另一个对象合并为嵌套对象

将键从另一个对象合并为嵌套对象
EN

Stack Overflow用户
提问于 2018-10-02 16:17:36
回答 1查看 44关注 0票数 0

使用这样的对象数组:

代码语言:javascript
复制
const activities = [{
    id: 11129,
    recap: {
        id: 11129,
        recapValues: [
            {
                id: 1,
                internalName: 'Foo',
            },
            {
                id: 2,
                internalName: 'Bar',
            },
            {
                id: 6,
                internalName: 'Bongo',
            },
        ],
    },
},
{
    id: 11130,
    recap: {
        id: 11130,
        recapValues: [
            {
                id: 4,
                internalName: 'Bingo',
            },
            {
                id: 5,
                internalName: 'Bango',
            },
            {
                id: 6,
                internalName: 'Bongo',
            },
        ],
    },
}]

我的目标是将responseOptionsconstraints键添加到每个嵌套的recapValues对象中,方法是匹配引用对象数组中的internalName键,如下所示:

代码语言:javascript
复制
const questions = [{
    internalName: 'Foo',
    responseOptions: null,
    constraints: {
        date: {},
    },
},
{
    internalName: 'Bar',
    responseOptions: {},
    constraints: null,
},
{
    internalName: 'Bango',
    responseOptions: null,
    constraints: null,
},
{
    internalName: 'Bingo',
    responseOptions: {},
    constraints: null,
},
{
    internalName: 'Bongo',
    responseOptions: null,
    constraints: {
        time: {},
    },
}]

的预期结果:

代码语言:javascript
复制
[{
    id: 11129,
    recap: {
        id: 11129,
        recapValues: [
            {
                id: 1,
                internalName: 'Foo',
                responseOptions: null,
                constraints: {
                    date: {},
                },
            },
            {
                id: 2,
                internalName: 'Bar',
                responseOptions: {},
                constraints: null,
            },
            {
                id: 6,
                internalName: 'Bongo',
                responseOptions: {},
                constraints: {
                    time: {},
                },
            },
        ],
    },
},
{
    id: 11130,
    recap: {
        id: 11130,
        recapValues: [
            {
                id: 4,
                internalName: 'Bingo',
                responseOptions: null,
                constraints: null,
            },
            {
                id: 5,
                internalName: 'Bango',
                responseOptions: {},
                constraints: null,
            },
            {
                id: 6,
                internalName: 'Bongo',
                responseOptions: {},
                constraints: {
                    time: {},
                },
            },
        ],
    },
}]

我的尝试导致了下面的代码,它只为每个responseOptions对象添加一次constraintsrecapValues键,而不是为recapValues中的每个单独问题添加一次

代码语言:javascript
复制
activities.map(activity => ({
  ...activity,
  recap: {
    ...activity.recap,
    recapValues: [
      ...activity.recap.recapValues,
      ...activity.recap.recapValues
        .forEach(q => questions
          .find(obj => obj.internalName === q.internalName)),
    ],
  },
}))

我错过了什么阻碍了预期的结果?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-02 16:30:03

forEach返回undefined,您想要map recapValues:

代码语言:javascript
复制
activities.map(activity => ({
 ...activity,
 recap: {
   ...activity.recap,
   recapValues: activity.recap.recapValues.map(value => ({
      ...value,
      ...questions.find(obj => obj.internalName === value.internalName),
   }),
  },
}))

我们可以通过使用映射函数来美化这一点:

代码语言:javascript
复制
 const mapObj = (key, mapper) => ({ [key]: val, ...rest }) => ({ [key]: mapper(val), ...rest });
 const map = mapper => arr => arr.map(mapper);

 const format = map(
    mapObj("recap", 
        mapObj("recapValues", 
           map(value => ({
             ...value,
             ...questions.find(q => q.internalName === value.internalName)
          }))
       )
   )
);

const output = format(activities);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52612422

复制
相关文章

相似问题

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