web-dev-qa-db-ja.com

2つのJavaScriptオブジェクトを1つにマージしますか?

私は次のオブジェクトを1つにマージしようとしていますが、これまでのところ運がありません-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()を試しましたが、最初の投稿データを削除するだけです-これに最適なアプローチは何ですか?

12
Zabs

これはもう少し汎用的な関数です。オブジェクトを介して伝播し、宣言された変数にマージされます。

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
Andrew Bone

別のアプローチは、ES6またはES2015をサポートするブラウザーで動作するスプレッド構文を使用することです

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

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

Object.assign()を使用して、オブジェクトのプロパティを空のオブジェクトに割り当てます。

6
Atul Sharma

次のように各アイテムに割り当てを適用する必要があります。

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

Lodashライブラリの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>
1
Nenad Vracar

jQuery.extend() が役立つ場合があります。試してみる

$.extend(obj1, obj2)
1
M Ciel

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