without recorrer objetos objeto objects eliminar elemento buscar array agregar javascript ecmascript-6

javascript - recorrer - object.assign array



Seguramente ES6+debe tener una forma de fusionar dos objetos javascript juntos, ¿qué es? (6)

Estoy cansado de cansarme de tener que escribir siempre código como este:

function shallowExtend(obj1,obj2){ var key; for ( key in obj2 ) { if ( obj2.hasOwnProperty(key) === false ) continue; obj1[key] = obj2[key] } }

O si no quiero escribir el código yo mismo, implemente una biblioteca que ya lo haga. Seguramente ES6 + viene al rescate en esto nos proporcionará algo así como Object.prototype.extend(obj2...) u Object.extend(obj1,obj2...)

Entonces, ¿ES6 + proporciona esa funcionalidad? Si no está ya allí, ¿está planeada dicha funcionalidad? Si no se planifica, ¿por qué no?


ES6

Object.assign(o1,o2) ; Object.assign({},o1,o2) ; //safe inheritance var copy=Object.assign({},o1); // clone o1 //------Transform array of objects to one object--- var subjects_assess=[{maths:92},{phy:75},{sport:99}]; Object.assign(...subjects_assess); // {maths:92,phy:75,sport:99}

ES7 o Babel

{...o1,...o2} // inheritance var copy= {...o1};



Podrás hacer una fusión superficial / extender / asignar en ES6 usando Object.assign:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

Sintaxis:

Object.assign ( target , ... fuentes );

donde ... las fuentes representan los objetos fuente.

Nota: no confunda ... fuentes en la definición de sintaxis con un operador de dispersión ES6.

Ejemplo:

var obj1 = {name: ''Daisy'', age: 30}; var obj2 = {name: ''Casey''}; Object.assign(obj1, obj2); console.log(obj1.name === ''Casey'' && obj1.age === 30); // true


Puede usar el objeto reposo / dispersión para esto:

const merged = {...obj1, ...obj2}

La proposal ECMAScript se encuentra actualmente en la etapa 3 y habilitada en Babel mediante el uso del escenario preestablecido de la etapa 3 .


Sé que esto es un problema viejo pero la solución más fácil en ES2015 / ES6 es bastante simple, usando Object.assign (),

Espero que esto ayude, esto hace que DEEP se fusione también:

/** * Simple is object check. * @param item * @returns {boolean} */ export function isObject(item) { return (item && typeof item === ''object'' && !Array.isArray(item) && item !== null); } /** * Deep merge two objects. * @param target * @param source */ export function mergeDeep(target, source) { if (isObject(target) && isObject(source)) { for (const key in source) { if (isObject(source[key])) { if (!target[key]) Object.assign(target, { [key]: {} }); mergeDeep(target[key], source[key]); } else { Object.assign(target, { [key]: source[key] }); } } } return target; }

Ejemplo de uso:

mergeDeep(this, { a: { b: { c: 123 } } }); // or const merged = mergeDeep({a: 1}, { b : { c: { d: { e: 12345}}}}); console.dir(merged); // { a: 1, b: { c: { d: [Object] } } }