Underscore tiene algunos métodos para hacer esto;
1. _.extend(destination, *sources)
Copia todas las propiedades de la fuente objetos más a la destino objeto, y devolver el destino objeto.
_.extend(a, _.extend(b, c));
=> {"one" : 1, "two" : 2, "three" : 3, "four" : 4, "five" : 5 }
O
_.extend(a, b);
=> {"one" : 1, "two" : 2, "three" : 3}
_.extend(a, c);
=> {"one" : 1, "two" : 2, "three" : 3, "four" : 4, "five" : 5 }
2. _.defaults(object, *defaults)
Rellene indefinidos propiedades en objeto con los valores de los valores por defecto objetos y devolver el objeto .
_.defaults(a, _.defaults(b, c));
=> {"one" : 1, "two" : 2, "three" : 3, "four" : 4, "five" : 5 }
O
_.defaults(a, b);
=> {"one" : 1, "two" : 2, "three" : 3}
_.defaults(a, c);
=> {"one" : 1, "two" : 2, "three" : 3, "four" : 4, "five" : 5 }
Una nota semántica: a pesar de la sintaxis [], ellos no son matrices en absoluto. El orden no está realmente garantizado. –
La orden de iteración no está garantizada por estándares ecma. Pero es la forma en que se implementa en la mayoría de los navegadores. (desde John Resig) Este comportamiento queda explícitamente sin definir por la especificación ECMAScript. En ECMA-262, sección 12.6.4: La mecánica de enumerar las propiedades ... depende de la implementación. Sin embargo, la especificación es bastante diferente de la implementación. Todas las implementaciones modernas de ECMAScript iteran a través de las propiedades de los objetos en el orden en que fueron definidas. Debido a esto, el equipo de Chrome ha considerado que esto es un error y lo solucionará. –