仅当对象 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
                    }
                }
            }