Como fazer o merge de dois ou mais objetos em javascript?

Este post mostra como realizar o merge dos valores dos atributos de dois ou mais objetos usando jQuery

Wolmir Cezer Garbin por Wolmir Cezer Garbin - - jQuery - TUTORIAL

Última atualização em: | 14192 Visualizações

Vou deixar duas dicas de como realizar o merge de duas ou mais propriedades de json em javascript. Vamos as soluções:

Solução usando jQuery $.extend()

A primeira solução é usar o $.extend() para fazer o merge.

Cuidado, a mesclagem realizada por $.extend() não é recursiva por padrão. Se uma propriedade do primeiro objeto for ela mesma um objeto ou matriz, ela será completamente sobrescrita por uma propriedade com a mesma chave no segundo objeto.

Veja o exemplo para entender melhor:

var dica = {
	assunto: 'Indefinido',
	view: 10,
	texto: 'Primeira dica de merge de json',
	tags: [{nome: 'merge json', tipo:'js'}]
};
var dica2 = {
	assunto: 'Merge de valores',
	tags: [{usando:'jQuery'}]
};

// Merge
$.extend( dica, dica2 );

console.log( JSON.stringify( dica ) );


O resultado será:

{"assunto":"Merge de valores","view":10,"texto":"Primeira dica de merge de json","tags":[{"usando":"jQuery"}]}

Observe que a tag foi mantido o valor apenas do segundo objeto.

Para mesclar recursivamente e manter os valores contidos no primiro objeto e adicionar as do segundo objeto, podemos adicionar como primeiro parâmetro no extend o valor true, veja:

var dica = {
	assunto: 'Indefinido',
	view: 10,
	texto: 'Primeira dica de merge de json',
	tags: [{nome: 'merge json', tipo:'js'}]
};
var dica2 = {
	assunto: 'Merge de valores',
	tags: [{usando:'jQuery'}]
};

// Merge
$.extend( true, dica, dica2 );

console.log( JSON.stringify( dica ) );

E o resultado será:

{"assunto":"Merge de valores","view":10,"texto":"Primeira dica de merge de json","tags":[{"nome":"merge json","tipo":"js","usando":"jQuery"}]}

Solução usando concat()

Supondo que queira mesclar dois arrays pode fazer o uso do concat(). Veja o exemplo:

var json1 = [{id:1, name: 'João'}];
var json2 = [{id:2, name: 'José'}];

var jsonResult = json1.concat( json2 );

console.log( JSON.stringify( jsonResult ) );

O resultado será:

[{"id":1,"name":"João"},{"id":2,"name":"José"}]

Não esqueca de deixar suas dúvidas nos comentários e compartilhar este post.


Publique seu post no Receitas de Código

Aguarde, estamos trabalhando para que você possa publicar sua postagem no Receitas de Código!