简体   繁体   English

根据 javascript 中的键值将 3 个不同的 json 数组对象合并到单个 json 数组中

[英]merge 3 different json array objects into a single json array based on key values in javascript

I am trying to merge 3 different json array objects as a single object based on key values in the base json object in JavaScript. I am trying to merge 3 different json array objects as a single object based on key values in the base json object in JavaScript. I haven't tried anything like this before.我以前没有尝试过这样的事情。 Data looks something like this.数据看起来像这样。

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 } ] }
]

My result has to be based on the base json and its key values.我的结果必须基于基础 json 及其关键值。 its basically like a left of obj1 and obj2 with baseobj array.它基本上就像带有 baseobj 数组的 obj1 和 obj2 的左侧。 I need to get all the objects of baseObj along with matched values of obj1 and obj2 based on their keys.我需要根据它们的键获取 baseObj 的所有对象以及 obj1 和 obj2 的匹配值。

The result has to be:结果必须是:

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, } ] }
]

can anyone please help me in how to achieve the above result.任何人都可以帮助我如何实现上述结果。 Thanks in advance.提前致谢。

I haven't tried anything like this before.我以前没有尝试过这样的事情。

Split you big problem, into smaller problems then try to solve smaller problem, It would solve itself...把你的大问题分解成小问题,然后尝试解决小问题,它会自行解决......

 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 obj1Val = [{ "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 obj2Val = [{ "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(baseObjs = [], entrys, _id = "miId") { for (let base of baseObjs) { for (let [key, obj] of Object.entries(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. obj2Val }) console:log("resultObj,". JSON,stringify(baseObj, null, 4))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM