web-dev-qa-db-fra.com

La fusion de deux objets javascript en un seul?

J'essaie de fusionner les objets suivants en un seul mais je n'ai pas eu de chance jusqu'à présent. La structure est la suivante dans mon console.log:

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

Une fois fusionné, je veux qu'il ressemble à ce qui suit

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

J'ai essayé object.assign () mais il ne s'agit que de supprimer les données des publications initiales. Quelle est la meilleure approche pour cela?

7
Zabs

Voici une fonction un peu plus générique. Il se propage à travers l'objet et fusionnera en une variable déclarée.

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)

J'espère que ça t'as aidé.

2
Andrew Bone

Une autre approche consiste à utiliser la syntaxe de propagation qui fonctionne sur les navigateurs prenant en charge ES6 ou 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);

Utilisez Object.assign() et affectez les propriétés de l'objet à un objet vide.

5
Atul Sharma

Vous pouvez utiliser la méthode merge de la bibliothèque Lodash.

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>

2
Nenad Vracar

vous devez appliquer assigner à chaque article comme ceci: 

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

jQuery.extend () pourrait aider. Essayer

$.extend(obj1, obj2)
1
M Ciel

Vous pouvez effectuer les opérations suivantes avec 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