Estoy tratando de fusionar 3 objetos de matriz json diferentes como un solo objeto basado en valores clave en el objeto json base en JavaScript. No he probado nada como esto antes. Los datos se parecen a esto.
var baseObj = [ { "miId": 1, "val": 2, "smiList": [ { "smiId": '1a', "val": 3 }, { "smiId": '1b', "val": 4 } ] }, { "miId": 2, "val": 22, "smiList": [ { "smiId": '2a', "val": 33 }, { "smiId": '2b', "val": 43 } ] } ] var obj1 = [ { "miId": 1, "val": 23, "smiList": [ { "smiId": '1a', "val": 13 }, { "smiId": '1c', "val": 14 } ] }, { "miId": 4, "val": 24, "smiList": [ { "smiId": '2a', "val": 33 }, { "smiId": '2b', "val": 43 } ] } ] var obj2 = [ { "miId": 11, "val": 22, "smiList": [ { "smiId": '1a', "val": 53 }, { "smiId": '1c', "val": 14 } ] }, { "miId": 2, "val": 43, "smiList": [ { "smiId": '2a', "val": 6 }, { "smiId": '2b', "val": 7 } ] } ]Mi resultado debe basarse en el json base y sus valores clave. es básicamente como una izquierda de obj1 y obj2 con matriz baseobj. Necesito obtener todos los objetos de baseObj junto con los valores coincidentes de obj1 y obj2 según sus claves.
El resultado tiene que ser:
var resultObj = [ { "miId": 1, "val": 2, "obj1Val" :23, "smiList": [ {"smiId": '1a', "val": 3, "obj1Val": 13}, { "smiId": '1b', "val": 4 } ] }, { "miId": 2, "val": 22, "obj2Val" :43, "smiList": [ { "smiId": '2a', "val": 33, "obj2Val" :6}, { "smiId": '2b', "val": 43, "obj2Val" :7, } ] } ]¿Alguien puede ayudarme a lograr el resultado anterior? Gracias por adelantado.
No he probado nada como esto antes.
Divide tu gran problema en problemas más pequeños y luego trata de resolver un problema más pequeño. Se resolvería solo...
var baseObj = [{ "miId": 1, "val": 2, "smiList": [{ "smiId": '1a', "val": 3 }, { "smiId": '1b', "val": 4 }] }, { "miId": 2, "val": 22, "smiList": [{ "smiId": '2a', "val": 33 }, { "smiId": '2b', "val": 43 }] }] var obj1 = [{ "miId": 1, "val": 23, "smiList": [{ "smiId": '1a', "val": 13 }, { "smiId": '1c', "val": 14 }] }, { "miId": 4, "val": 24, "smiList": [{ "smiId": '2a', "val": 33 }, { "smiId": '2b', "val": 43 }] }] var obj2 = [{ "miId": 11, "val": 22, "smiList": [{ "smiId": '1a', "val": 53 }, { "smiId": '1c', "val": 14 }] }, { "miId": 2, "val": 43, "smiList": [{ "smiId": '2a', "val": 6 }, { "smiId": '2b', "val": 7 }] }] function marge(baseObj, entrys, _id) { for (let base of baseObj) { for (let [key, obj] of entrys) { let item = obj.find(o => o[_id] == base[_id]) if (!item) continue; base[key] = item.val; marge(base.smiList || [], [[key, item.smiList]], "smiId") } } } marge(baseObj, [["obj1Val", obj1], ["obj2Val", obj2]], "miId") console.log("resultObj:", baseObj)