Estoy buscando la mejor manera de "agregar" múltiples objetos JavaScript (matrices asociativas).
Por ejemplo, dado:
a = { "one" : 1, "two" : 2 };
b = { "three" : 3 };
c = { "four" : 4, "five" : 5 };
cuál es la mejor manera de calcular:
{ "one" : 1, "two" : 2, "three" : 3, "four" : 4, "five" : 5 }
Respuestas:
Se introdujo ECMAscript 6
Object.assign()
para lograr esto de forma nativa en Javascript.Documentación de MDN sobre Object.assign ()
Object.assign
es compatible con muchos navegadores modernos, pero todavía no todos. Utilice un transpilador como Babel y Traceur para generar JavaScript ES5 compatible con versiones anteriores.fuente
Object.assign.apply({}, [{a: 1}, {b: 2}, ....])
Object.assign.apply
para fusionar una matriz de objetos es usar el operador de propagación:Object.assign( ...objects )
Podrías usar jquery
$.extend
como este:fuente
d = $.extend({},a,b,c);
Esto debería hacerlo:
Salida:
fuente
length
busca el tamaño de la matriz en cada invocación? Estoy tan acostumbrado a escribirfor (var i = 0, len = array.length; i < len; ++i)
que no puedo recordar por qué empecé a hacerlo.ECMAScript 6 ha extendido la sintaxis . Y ahora puedes hacer esto:
fuente
Underscore tiene pocos métodos para hacer esto;
1. _.extend (destino, * fuentes)
Copie todas las propiedades de los objetos de origen en el objeto de destino y devuelva el objeto de destino .
O
2. _.defaults (objeto, * valores predeterminados)
Complete las propiedades no definidas en el objeto con valores de los objetos predeterminados y devuelva el objeto .
O
fuente
¿Por qué la función debería restringirse a 3 argumentos? Además, busque
hasOwnProperty
.fuente
La clonación superficial (excluyendo el prototipo) o la fusión de objetos ahora es posible usando una sintaxis más corta que Object.assign () .
La sintaxis de propagación para literales de objeto se introdujo en ECMAScript 2018 ):
El operador Spread (...) se admite en muchos navegadores modernos, pero no en todos.
Por lo tanto, se recomienda utilizar un transpilador como Babel para convertir el código ECMAScript 2015+ en una versión retrocompatible de JavaScript en navegadores o entornos actuales y antiguos.
Este es el código equivalente que Babel generará para usted:
fuente
Aviso: se sobrescribirán las propiedades existentes en los objetos anteriores.
fuente
a === d
al final. Eso podría estar bien y puede que no.Es fácil usar el operador de propagación ES7 para un objeto, en la consola de su navegador
fuente
Para fusionar un número dinámico de objetos, podemos usar
Object.assign
con sintaxis extendida .La función anterior acepta cualquier número de objetos, fusionando todas sus propiedades en un nuevo objeto con propiedades de objetos posteriores que sobrescriben las de los objetos anteriores.
Manifestación:
Mostrar fragmento de código
Para fusionar una matriz de objetos, se puede aplicar un método similar.
Manifestación:
Mostrar fragmento de código
fuente
Probablemente, la forma más rápida, eficiente y genérica es esta (puede fusionar cualquier número de objetos e incluso copiar al primero -> asignar):
También le permite modificar el primer objeto tal como pasó por referencia. Si no quiere esto pero quiere tener un objeto completamente nuevo que contenga todas las propiedades, puede pasar {} como primer argumento.
objeto_combinado y objeto1 contienen las propiedades de objeto1, objeto2, objeto3.
En este caso, el objeto_combinado contiene las propiedades de object1, object2, object3 pero object1 no se modifica.
Consulte aquí: https://jsfiddle.net/ppwovxey/1/
Nota: los objetos JavaScript se pasan por referencia.
fuente
ES6 ++
La pregunta es agregar varios objetos diferentes en uno.
digamos que tiene un objeto con varias claves que son objetos:
esta fue la solución que encontré (todavía tengo que foreach: /)
Al hacer esto, podemos agregar dinámicamente TODAS las claves de objeto en una.
fuente
El más simple: operadores de propagación
fuente
fuente