【问题标题】:Merge two objects only if id in object 2 exists in object 1 in plain Javascript仅当对象 2 中的 id 存在于纯 Javascript 中的对象 1 中时才合并两个对象
【发布时间】:2021-06-30 10:13:36
【问题描述】:

有两个对象:

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

我想将它们合并在一起如果 zip 中的 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 is zips is 'skipped' 因为它不在设备对象中。

我研究过像 Object.assign 或与 ... 合并这样的函数循环,但它们会产生不良结果(比如添加上面的 id 412,因为它存在于第二个对象中)

非常感谢任何提示或提示或更好的查看位置!

【问题讨论】:

标签: javascript object merge


【解决方案1】:

您可以使用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);

【讨论】:

  • const { id, state } = obj; 你从不使用state :p
【解决方案2】:

我通过嵌套每个来解决这个问题。我查看每个主对象并控制是否有任何相同的 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
                    }
                }
            }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-06
    • 2020-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-08
    相关资源
    最近更新 更多