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); |
使用
这是一个更通用的函数。它通过对象传播,并将合并到声明的变量中。
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); |
您可以使用
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库中的
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"> |