仅当对象 2 中的 id 存在于对象 1 中时才合并两个对象 Javascript
Merge two objects only if id in object 2 exists in object 1 in plain Javascript
得到两个对象:
master = [ { "id": 411, "state": 1 },
{ "id": 2134, "state": 1 },
{ "id": 2135, "state": 0 },
{ "id": 2137, "state": 0 } ]
zips = [ { "id": 411, "zip": "90201" },
{ "id": 412, "zip": "90201" },
{ "id": 2134, "zip": "90201" },
{ "id": 2137, "zip": "90201" } ]
我想将它们合并在一起只有如果设备中存在 zips 中的 ID。使用以上数据,结果应该是:
master = [ { "id": 411, "state": 1, "zip": "90201" },
{ "id": 2134, "state": 1, "zip": "90201" },
{ "id": 2135, "state": 0 },
{ "id": 2137, "state": 0, "zip": "90201" } ]
id: 412 是 zips 是 'skipped' 因为它不在设备对象中。
我研究过循环遍历 Object.assign 等函数或与 ... 合并,但它们会产生不良结果(例如在上面添加 id 412,因为它存在于第二个对象中)
非常感谢任何提示或技巧或更好的地方!
您可以使用 map
轻松获得结果
const result = master.map((obj) => ({
...obj,
...zips.find((o) => o.id === obj.id),
}));
master = [
{ id: 411, state: 1 },
{ id: 2134, state: 1 },
{ id: 2135, state: 0 },
{ id: 2137, state: 0 },
];
zips = [
{ id: 411, zip: "90201" },
{ id: 412, zip: "90201" },
{ id: 2134, zip: "90201" },
{ id: 2137, zip: "90201" },
];
const result = master.map((obj) => {
const { id } = obj;
const objThatExist = zips.find((o) => o.id === id);
return { ...obj, ...objThatExist };
});
console.log(result);
我用嵌套的每个来解决这个问题。我查看每个主对象并控制是否存在相同的 ID。如果它们是相同的值,则将 zip 推入主对象
jQuery
$.each(zips,(index,object)=>{
var zipID=object.id;
$.each(master,(indexMaster,objectMaster)=>{
if(zipID==objectMaster.id){
objectMaster['zip']=zipID
}
})
})
console.log(master);
JavaScript
zips.forEach(index,object){
var zipID=object.id;
master.forEach(indexMaster,objectMaster){
if(zipID==objectMaster.id){
objectMaster['zip']=zipID
}
}
}
得到两个对象:
master = [ { "id": 411, "state": 1 },
{ "id": 2134, "state": 1 },
{ "id": 2135, "state": 0 },
{ "id": 2137, "state": 0 } ]
zips = [ { "id": 411, "zip": "90201" },
{ "id": 412, "zip": "90201" },
{ "id": 2134, "zip": "90201" },
{ "id": 2137, "zip": "90201" } ]
我想将它们合并在一起只有如果设备中存在 zips 中的 ID。使用以上数据,结果应该是:
master = [ { "id": 411, "state": 1, "zip": "90201" },
{ "id": 2134, "state": 1, "zip": "90201" },
{ "id": 2135, "state": 0 },
{ "id": 2137, "state": 0, "zip": "90201" } ]
id: 412 是 zips 是 'skipped' 因为它不在设备对象中。
我研究过循环遍历 Object.assign 等函数或与 ... 合并,但它们会产生不良结果(例如在上面添加 id 412,因为它存在于第二个对象中)
非常感谢任何提示或技巧或更好的地方!
您可以使用 map
轻松获得结果const result = master.map((obj) => ({
...obj,
...zips.find((o) => o.id === obj.id),
}));
master = [
{ id: 411, state: 1 },
{ id: 2134, state: 1 },
{ id: 2135, state: 0 },
{ id: 2137, state: 0 },
];
zips = [
{ id: 411, zip: "90201" },
{ id: 412, zip: "90201" },
{ id: 2134, zip: "90201" },
{ id: 2137, zip: "90201" },
];
const result = master.map((obj) => {
const { id } = obj;
const objThatExist = zips.find((o) => o.id === id);
return { ...obj, ...objThatExist };
});
console.log(result);
我用嵌套的每个来解决这个问题。我查看每个主对象并控制是否存在相同的 ID。如果它们是相同的值,则将 zip 推入主对象
jQuery
$.each(zips,(index,object)=>{
var zipID=object.id;
$.each(master,(indexMaster,objectMaster)=>{
if(zipID==objectMaster.id){
objectMaster['zip']=zipID
}
})
})
console.log(master);
JavaScript
zips.forEach(index,object){
var zipID=object.id;
master.forEach(indexMaster,objectMaster){
if(zipID==objectMaster.id){
objectMaster['zip']=zipID
}
}
}