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
Última atualização em: | 14382 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.