json 将两个JavaScript对象合并为一个?

0tdrvxhp  于 4个月前  发布在  Java
关注(0)|答案(6)|浏览(95)

此问题在此处已有答案

How can I merge properties of two JavaScript objects dynamically?(69个回答)
5年前关闭。
我试图将以下对象合并为一个,但到目前为止还没有成功-在我的console.log中结构如下:

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

字符串
一旦合并,我希望它看起来像下面这样

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


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

jbose2ul

jbose2ul1#

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

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

nnvyjq4y

nnvyjq4y2#

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

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)

字符串
我希望这对你有帮助。

1sbrub3j

1sbrub3j3#

您可以使用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);

字符串

dxxyhpgq

dxxyhpgq4#

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

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

const result = _.merge({}, posts, notes);
console.log(result)

个字符

5cg8jx4n

5cg8jx4n5#

你需要像这样对每一个项目进行赋值:

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);

字符串

sauutmhj

sauutmhj6#

jQuery.extend()可能会有帮助。
默认情况下,$.extend()执行的合并不是递归的;如果第一个对象的属性本身是一个对象或数组,则它将被第二个或后续对象中具有相同键的属性完全覆盖。值不会合并。但是,通过为第一个函数参数传递true,对象将被递归合并。
尝试

$.extend(obj1, obj2)

字符串

相关问题