关于json:将两个javascript对象合并为一个?

Merging two javascript objects into one?

本问题已经有最佳答案,请猛点这里访问。

我正在尝试将以下对象合并为一个对象,但到目前为止还没有运气-console.log中的结构如下:

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

合并后,我希望它看起来像

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

我已经尝试过object.assign(),但它只是删除了最初的posts数据——这最好的方法是什么?


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

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


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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)

我希望你觉得这有帮助。


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

1
2
3
4
5
6
7
8
9
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);


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

1
2
3
4
5
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);


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

1
$.extend(obj1, obj2)

您可以使用lodash库中的merge方法。

1
2
3
4
5
const posts = {'2018-05-11' : {posts: 2}}
const notes = {'2018-05-11' : {notes: 1}}

const result = _.merge({}, posts, notes);
console.log(result)
1
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.js">