【问题标题】:Compare two objects and create new object比较两个对象并创建新对象
【发布时间】:2021-11-29 12:45:18
【问题描述】:

我有两个对象如下:

var1 = {
    "ELEMENT1": [1110,1111],
    "ELEMENT2": ["909"],
    "ELEMENT3": ["910"]
}

var2 =  {
    "ELEMENT3": [
    {
        "ID":910,
        "NAME":"ELEMENT3",
        "DETAILS":"CURRENT"
    },
    {
        "ID":912,
        "NAME":"ELEMENT3",
        "DETAILS":"FUTURE"
    }
    ],
    "ELEMENT2":[
    {
        "ID":909,
        "NAME": "ELEMENT2",
        "DETAILS":"OUTAGE"
    },
    {
        "ID": 910,
        "NAME": "ELEMENT2",
        "DETAILS":"OUTAGE"
    }
    ],
    "ELEMENT1":[
    {
        "ID": 1110,
        "NAME": "WORK_PACKAGE",
        "DETAILS": "INLINE"
    },
    {
        "ID": 1111,
        "NAME": "WORK_PACKAGE",
        "DETAILS": "INLINE"
    },
    {
        "ID": 1112,
        "NAME": "WORK_PACKAGE",
        "DETAILS": "INLINE"
    },
    {
        "ID": 1113,
        "NAME": "WORK_PACKAGE",
        "DETAILS": "INLINE"
    }]
}

在比较 var1var2 之后,我正在尝试创建第三个对象。第三个对象应该只包含那些存在于var1 中的ID

第三个对象应该如下所示:

{
    "ELEMENT3": [
    {
        "ID":910,
        "NAME":"ELEMENT3",
        "DETAILS":"CURRENT"
    }
    ],
    "ELEMENT2":[
    {
        "ID":909,
        "NAME": "ELEMENT2",
        "DETAILS":"OUTAGE"
    }
    ],
    "ELEMENT1":[
    {
        "ID": 1110,
        "NAME": "WORK_PACKAGE",
        "DETAILS": "INLINE"
    },
    {
        "ID": 1111,
        "NAME": "WORK_PACKAGE",
        "DETAILS": "INLINE"
    }
    ]
}

【问题讨论】:

    标签: javascript ecmascript-6


    【解决方案1】:

    应该这样做:

    var var1 = {
        "ELEMENT1": ["1110","1111"],
        "ELEMENT2": ["909"],
        "ELEMENT3": ["910"]
    }
    
    var var2 =  {
        "ELEMENT3": [
        {
            "ID":910,
            "NAME":"ELEMENT3",
            "DETAILS":"CURRENT"
        },
        {
            "ID":912,
            "NAME":"ELEMENT3",
            "DETAILS":"FUTURE"
        }
        ],
        "ELEMENT2":[
        {
            "ID":909,
            "NAME": "ELEMENT2",
            "DETAILS":"OUTAGE"
        },
        {
            "ID": 910,
            "NAME": "ELEMENT2",
            "DETAILS":"OUTAGE"
        }
        ],
        "ELEMENT1":[
        {
            "ID": 1110,
            "NAME": "WORK_PACKAGE",
            "DETAILS": "INLINE"
        },
        {
            "ID": 1111,
            "NAME": "WORK_PACKAGE",
            "DETAILS": "INLINE"
        },
        {
            "ID": 1112,
            "NAME": "WORK_PACKAGE",
            "DETAILS": "INLINE"
        },
        {
            "ID": 1113,
            "NAME": "WORK_PACKAGE",
            "DETAILS": "INLINE"
        }]
    }
    
    var obj = {};
    Object.keys(var2).forEach((item) => {
      var2[item].forEach((subItem) => {
        if(var1[item].indexOf(`${subItem.ID}`) > -1) {
          obj[item] = [...(obj[item] ?? []), subItem]
        }
      })
    });
    
    console.log(obj);

    【讨论】:

      【解决方案2】:

      您可以循环遍历 var2filter IDs 其中 var1 includes 并将过滤后的道具分配给新对象:

      let var1 = {
        ELEMENT1: [1110, 1111],
        ELEMENT2: [909],
        ELEMENT3: [910],
      }
      
      let var2 = {
        ELEMENT3: [
          { ID: 910, NAME: 'ELEMENT3', DETAILS: 'CURRENT' },
          { ID: 912, NAME: 'ELEMENT3', DETAILS: 'FUTURE' },
        ],
        ELEMENT2: [
          { ID: 909, NAME: 'ELEMENT2', DETAILS: 'OUTAGE' },
          { ID: 910, NAME: 'ELEMENT2', DETAILS: 'OUTAGE' },
        ],
        ELEMENT1: [
          { ID: 1110, NAME: 'WORK_PACKAGE', DETAILS: 'INLINE' },
          { ID: 1111, NAME: 'WORK_PACKAGE', DETAILS: 'INLINE' },
          { ID: 1112, NAME: 'WORK_PACKAGE', DETAILS: 'INLINE' },
          { ID: 1113, NAME: 'WORK_PACKAGE', DETAILS: 'INLINE' },
        ],
      }
      
      const result = {}
      
      for (let key in var2) {
        result[key] = var2[key].filter(o => var1[key]?.includes(o.ID))
      }
      
      console.log(JSON.stringify(result, null, 2))

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-18
        相关资源
        最近更新 更多