Estou procurando a melhor maneira de "adicionar" vários objetos JavaScript (matrizes associativas).
Por exemplo, dado:
a = { "one" : 1, "two" : 2 };
b = { "three" : 3 };
c = { "four" : 4, "five" : 5 };
qual é a melhor maneira de calcular:
{ "one" : 1, "two" : 2, "three" : 3, "four" : 4, "five" : 5 }
Respostas:
ECMAscript 6 introduzido
Object.assign()
para conseguir isso nativamente em Javascript.Documentação MDN em Object.assign ()
Object.assign
é suportado em muitos navegadores modernos, mas ainda não em todos. Use um transpiler como Babel e Traceur para gerar JavaScript ES5 compatível com versões anteriores.fonte
Object.assign.apply({}, [{a: 1}, {b: 2}, ....])
Object.assign.apply
para mesclar uma matriz de objetos é usar o operador de propagação:Object.assign( ...objects )
Você pode usar o jquery
$.extend
assim:fonte
d = $.extend({},a,b,c);
Isso deve servir:
Resultado:
fonte
length
pesquisa o tamanho da matriz em cada invocação? Estou tão acostumada a escreverfor (var i = 0, len = array.length; i < len; ++i)
que não consigo lembrar de cara por que comecei a fazer isso.ECMAScript 6 espalhou sintaxe . E agora você pode fazer isso:
fonte
O sublinhado tem poucos métodos para fazer isso;
1. _.extend (destino, * fontes)
Copie todas as propriedades dos objetos de origem para o objeto de destino e retorne o objeto de destino .
Ou
2. _.defaults (objeto, * padrões)
Preencha as propriedades indefinidas no objeto com valores dos objetos padrão e retorne o objeto .
Ou
fonte
Por que a função deve ser restrita a 3 argumentos? Além disso, verifique
hasOwnProperty
.fonte
A clonagem superficial (excluindo protótipo) ou mesclagem de objetos agora é possível usando uma sintaxe mais curta do que Object.assign () .
A sintaxe de propagação para literais de objeto foi introduzida no ECMAScript 2018 ):
O operador Spread (...) é suportado em muitos navegadores modernos, mas não em todos.
Portanto, é recomendável usar um transpiler como o Babel para converter o código ECMAScript 2015+ em uma versão compatível com versões anteriores de JavaScript em navegadores ou ambientes atuais e mais antigos.
Este é o código equivalente que o Babel irá gerar para você:
fonte
Aviso: as propriedades existentes nos objetos anteriores serão sobrescritas.
fonte
a === d
no final. Isso pode estar ok ou não.É fácil usar o operador spread ES7 para um objeto, no console do seu navegador, coloque
fonte
Para mesclar um número dinâmico de objetos, podemos usar
Object.assign
com sintaxe de propagação .A função acima aceita qualquer número de objetos, mesclando todas as suas propriedades em um novo objeto com propriedades de objetos posteriores sobrescrevendo aquelas de objetos anteriores.
Demo:
Exibir trecho de código
Para mesclar uma matriz de objetos, um método semelhante pode ser aplicado.
Demo:
Exibir trecho de código
fonte
Provavelmente, a maneira mais rápida, eficiente e genérica é esta (você pode mesclar qualquer número de objetos e até mesmo copiar para o primeiro -> atribuir):
Ele também permite que você modifique o primeiro objeto conforme ele passa por referência. Se você não deseja isso, mas deseja um objeto completamente novo contendo todas as propriedades, você pode passar {} como o primeiro argumento.
combinado_object e object1 contêm as propriedades de object1, object2, object3.
Nesse caso, o combinado_objeto contém as propriedades de objeto1, objeto2, objeto3, mas objeto1 não é modificado.
Verifique aqui: https://jsfiddle.net/ppwovxey/1/
Nota: os objetos JavaScript são passados por referência.
fonte
ES6 ++
A questão é adicionar vários objetos diferentes em um.
digamos que você tenha um objeto com várias chaves que são objetos:
esta foi a solução que encontrei (ainda tenho que foreach: /)
Fazendo isso, podemos adicionar dinamicamente TODAS as chaves de objeto em uma.
fonte
Mais simples: espalhar operadores
fonte
fonte