我对此很陌生,我有一个如下所示的对象数组,
arr1 = {
"ID": "sss",
"Name": "Ven"
"Main": [
{"ID": "asds-vg45"},
{"ID": "rrra-2e82"}
]
}
和另一个值对象,如下所示,
obj1 = {
"AID": "ssasas222",
"Main": {
"asds-vg45" : {
"NAME" : "Item1",
"STML" : {
"MIKE" : {
"bearer" : {
"token" : "ya29.Gl0kBoYJD"
},
"STA" : true
}
},
"STATUS" : true
},
"rrra-2e82" : {
"NAME" : "Item2",
"STML" : {
"MIKE" : {
"bearer" : {
"token" : "yas9.Gl0kBoYJD"
},
"STA" : true
}
},
"STATUS" : true
},
"t655e-2e82" : {
"NAME" : "Item2",
"STML" : {
"MIKE" : {
"bearer" : {
"token" : "yas9.Gl0kBoYJD"
},
"STA" : true
}
},
"STATUS" : true
}
}
现在,我正在尝试为它提供一个新对象,该对象包括所有与“ arr1”和“ obj1”中的“ ID”匹配的“ Main”对象的obj1中匹配的所有值,此处的匹配ID为两者都通用的“ Main”数组中,我尝试获取的输出如下所示,
main_obj = {
"ID": "sss",
"Name": "Ven",
"AID": "ssasas222"
"Main": {
"asds-vg45" : {
"NAME" : "Item1",
"STML" : {
"MIKE" : {
"bearer" : {
"token" : "ya29.Gl0kBoYJD"
},
"STA" : true
}
},
"STATUS" : true
},
"rrra-2e82" : {
"NAME" : "Item2",
"STML" : {
"MIKE" : {
"bearer" : {
"token" : "yas9.Gl0kBoYJD"
},
"STA" : true
}
},
"STATUS" : true
}
}
}
答案 0 :(得分:0)
您应该可以使用reduce
来做到这一点:
const matches = arr1.Main
.reduce((acc, cur) => {
if (obj1.Main[cur.ID]) {
acc[cur.ID]: obj1.Main[cur.ID]
}
return acc
}, {})
const mainObj = {
ID: arr1.ID,
Name: arr1.Name,
AID: obj1.AID,
Main: matches
}
您只需遍历ID数组并使用匹配的键构建新对象acc
。
答案 1 :(得分:0)
您可以将给定数据的键和对象映射为新对象。
var data = { AID: "ssasas222", Main: { "asds-vg45": { NAME: "Item1", STML: { MIKE: { bearer: { token: "ya29.Gl0kBoYJD" }, STA: true } }, STATUS: true }, "rrra-2e82": { NAME: "Item2", STML: { MIKE: { bearer: { token: "yas9.Gl0kBoYJD" }, STA: true } }, STATUS: true }, "t655e-2e82": { NAME: "Item2", STML: { MIKE: { bearer: { token: "yas9.Gl0kBoYJD" }, STA: true } }, STATUS: true } } },
filter = { ID: "sss", Name: "Ven", Main: [{ ID: "asds-vg45" }, { ID: "rrra-2e82" }] },
result = Object.assign(
{},
data,
{ Main: Object.assign(...filter.Main.map(({ ID }) => ({ [ID]: data.Main[ID] }))) }
);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }