Estoy tratando de fusionar dos objetos en uno (obj1 y obj2 en objResult):
var obj1 = {
0: [{obj1key1: 'obj1value1'}, {obj1key2: 'obj1value2'}],
1: [{obj1key3: 'obj1value3'}, {obj1key4: 'obj1value4'}],
2: [{obj1key5: 'obj1value5'}, {obj1key6: 'obj2value6'}]
};
var obj2 = {
0: [{obj2key1: 'obj2value1'}, {obj2key2: 'obj2value2'}],
1: [{obj2key3: 'obj2value3'}, {obj2key4: 'obj2value4'}],
2: [{obj2key5: 'obj2value5'}, {obj2key6: 'obj2value6'}]};
var objResult = {
0: {
0: [{obj1key1: 'obj1value1'}, {obj1key2: 'obj1value2'}],
1: [{obj2key1: 'obj2value1'}, {obj2key1: 'obj2value1'}]
},
1: {
0: [{obj1key3: 'obj1value3'}, {obj1key4: 'obj1value4'}],
1: [{obj2key3: 'obj2value3'}, {obj2key4: 'obj2value4'}]
},
2: {
0: [{obj1key5: 'obj1value5'}, {obj1key6: 'obj1value6'}],
1: [{obj2key5: 'obj2value5'}, {obj2key6: 'obj2value6'}]
}
}
Probé las funciones de combinación de jQuery y lodash pero sin éxito. ¿Podría aconsejar la mejor manera de fusionar estos dos objetos en uno? Ya sea con JS simple o jquery / lodash.
3 respuestas
Itere sobre las claves en uno de los objetos, y para cada uno, configure esa clave en el objeto resultante en un objeto que contenga los valores de ambos objetos originales.
function merge(obj1, obj2) {
var objResult = {};
Object.keys(obj1).forEach(function(key) {
objResult[key] = {
0: obj1[key],
1: obj2[key]
}
})
return objResult;
}
Esto supone que ambos objetos tienen el mismo conjunto de claves. Si no lo hacen, puede iterar sobre las claves de ambos objetos, y esto establecerá indefinido como el valor cuando ese objeto no contenga esa clave.
Aquí hay un ejemplo simple de JS que puede administrar objetos con diferentes tamaños.
var obj1 = {
0: [{obj1key1: 'obj1value1'}, {obj1key2: 'obj1value2'}],
1: [{obj1key3: 'obj1value3'}, {obj1key4: 'obj1value4'}],
2: [{obj1key5: 'obj1value5'}, {obj1key6: 'obj2value6'}]
};
var obj2 = {
0: [{obj2key1: 'obj2value1'}, {obj2key2: 'obj2value2'}],
1: [{obj2key3: 'obj2value3'}, {obj2key4: 'obj2value4'}],
2: [{obj2key5: 'obj2value5'}, {obj2key6: 'obj2value6'}]};
var obj3 = [obj1, obj2].reduce(function(result, obj, objNum){
return Object.keys(obj).reduce(function(result, k){
result[k] = result[k] || {};
result[k][objNum] = obj[k];
return result;
}, result);
}, {});
console.log(obj3);
Suponiendo que los dos objetos son del mismo tamaño (longitud)
var obj1 = {
0: [{obj1key1: 'obj1value1'}, {obj1key2: 'obj1value2'}],
1: [{obj1key3: 'obj1value3'}, {obj1key4: 'obj1value4'}],
2: [{obj1key5: 'obj1value5'}, {obj1key6: 'obj2value6'}]
};
var obj2 = {
0: [{obj2key1: 'obj2value1'}, {obj2key2: 'obj2value2'}],
1: [{obj2key3: 'obj2value3'}, {obj2key4: 'obj2value4'}],
2: [{obj2key5: 'obj2value5'}, {obj2key6: 'obj2value6'}]};
var result = {};
_.each(obj1, function(obj, key){
result[key] = [];
result[key].push(obj);
result[key].push(obj2[key]);
});
$('body').append('<pre><code>' + JSON.stringify(result) + '</code></pre>');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://lodash.com/_js/lodash.js"></script>
Por supuesto, si tiene varias longitudes, debe iterar en la más grande y realizar un seguimiento del tamaño.
Preguntas relacionadas
Nuevas preguntas
javascript
Para preguntas sobre la programación en ECMAScript (JavaScript / JS) y sus diversos dialectos / implementaciones (excepto ActionScript). Incluya todas las etiquetas relevantes en su pregunta; por ejemplo, [node.js], [jquery], [json], etc.