代码之家  ›  专栏  ›  技术社区  ›  Zabs

将两个javascript对象合并为一个?[副本]

  •  21
  • Zabs  · 技术社区  · 6 年前

    我正在尝试将以下对象合并为一个对象,但迄今为止运气不佳-在我的控制台中,结构如下所示。日志:

        2018-05-11 : {posts: 2} // var posts
        2018-05-11 : {notes: 1} // var notes
    

    一旦合并,我希望它如下所示

    2018-05-11 : {posts: 2, notes: 1}
    

    我试过对象。assign(),但它只是删除最初的posts数据-实现这一点的最佳方法是什么?

    6 回复  |  直到 6 年前
        1
  •  16
  •   Atul Sharma    6 年前

    var x =  {posts: 2};
    var y = {notes: 1};
    var z = Object.assign( {}, x, y );
    console.log(z);

    使用 Object.assign() 并将对象属性指定给空对象。

        2
  •  4
  •   Andrew Bone    6 年前

    这里有一个更通用的函数。它通过对象传播,并将合并为一个声明的变量。

    const posts = {  '2018-05-11': {    posts: 2  },  '2018-05-12': {    posts: 5  }};
    const notes = {  '2018-05-11': {    notes: 1  },  '2018-05-12': {    notes: 3  }};
    
    function objCombine(obj, variable) {
      for (let key of Object.keys(obj)) {
        if (!variable[key]) variable[key] = {};
    
        for (let innerKey of Object.keys(obj[key]))
          variable[key][innerKey] = obj[key][innerKey];
      }
    }
    
    let combined = {};
    objCombine(posts, combined);
    objCombine(notes, combined);
    console.log(combined)

    我希望这对你有帮助。

        3
  •  4
  •   Mamun    6 年前

    可以使用执行以下操作 Object.assign() :

    var posts = {'2018-05-11' : {posts: 2}} // var posts
    var notes = {'2018-05-11' : {notes: 1}} // var notes
    
    Object.assign(posts['2018-05-11'], notes['2018-05-11']);
    console.log(posts);
        4
  •  3
  •   Nenad Vracar    6 年前

    你可以使用 merge 方法。

    const posts = {'2018-05-11' : {posts: 2}}
    const notes = {'2018-05-11' : {notes: 1}}
    
    const result = _.merge({}, posts, notes);
    console.log(result)
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.js"></script>
        5
  •  2
  •   MayK    6 年前

    您需要将分配应用于每个项目,如下所示:

    var a =  {"2018-05-11" : {notes: 1}};
    
    var b =  {"2018-05-11" : {posts: 3}};
    
    var result = {};
    
    Object.keys(a).forEach(k=>{result[k] = Object.assign(a[k],b[k])});
    
    console.log(result);
        6
  •  1
  •   Al.G.    6 年前

    jQuery.extend() 可能会有帮助。尝试

    $.extend(obj1, obj2)