【问题标题】:Merge objectS of object合并对象的对象
【发布时间】:2020-05-05 18:24:16
【问题描述】:

我想合并 2 个包含对象本身的对象。 像这样:

let selections = {
    123: {
        abc: {name: 'abc'},
        def: {name: 'def'}
    },
    456: {
        ghi: {name: 'ghi'},
        jkl: {name: 'jkl'}
    }
};

let flatSelections = Object.keys(selections).reduce((r, k) => {
    return selections[k];
}, {});

console.log(flatSelections);

/* expected data
flatSelections = {
    abc: {name: 'abc'},
    def: {name: 'def'},
    ghi: {name: 'ghi'},
    jkl: {name: 'jkl'}
};
*/

但我只有 selection['456'] 作为输出。 https://jsfiddle.net/benlesc/uw65bjo1/13/

【问题讨论】:

    标签: javascript object merge


    【解决方案1】:

    您需要从reduce 实际返回修改后的累加器。使用Object.assignSpread syntaxaccumulator i.e r 与项目合并,即k

    也可以使用Object.values,因为您只关心值。

    let selections = {
        123: {
            abc: {name: 'abc'},
            def: {name: 'def'}
        },
        456: {
            ghi: {name: 'ghi'},
            jkl: {name: 'jkl'}
        }
    };
    
    let flatSelections = Object.values(selections).reduce((r, k) => {
        return Object.assign(r, k)
    }, {});
    
    console.log(flatSelections);

    【讨论】:

    • 嗨舒巴姆!非常感谢。清晰、简单。
    【解决方案2】:

    您可以在Object.values() 上应用reduce

    let selections = {
        123: {
            abc: {name: 'abc'},
            def: {name: 'def'}
        },
        456: {
            ghi: {name: 'ghi'},
            jkl: {name: 'jkl'}
        }
    };
    
    const res = Object.values(selections).reduce((a, c) => {
        return {...a, ...c};
    }, {});
    
    console.log(res);
    .as-console-wrapper{min-height: 100%!important; top: 0;}

    【讨论】:

      【解决方案3】:

      使用Object.assign()

      let selections = {
          123: {
              abc: {name: 'abc'},
              def: {name: 'def'}
          },
          456: {
              ghi: {name: 'ghi'},
              jkl: {name: 'jkl'}
          }
      };
      
      let output = Object.assign(selections["123"] , selections["456"])
      console.log(output)

      你会得到一个输出

      {"abc": {"name": "abc"}, "def": {"name": "def"}, "ghi": {"name": "ghi"}, "jkl": {"name": "jkl"}}
      

      【讨论】:

      • 感谢您的回答。我知道这种可能性。但它即将在不知道对象键(123 或 456)的情况下执行它,它可能是任何东西。
      猜你喜欢
      • 2020-11-28
      • 2014-12-04
      • 2019-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-28
      • 2017-01-01
      • 2015-11-19
      相关资源
      最近更新 更多