代码之家  ›  专栏  ›  技术社区  ›  dhrupal khtrani Ranork

假设我有两个对象&根据它们我想要新对象

  •  1
  • dhrupal khtrani Ranork  · 技术社区  · 1 年前
    const data = {
        name : "teahyung",
        fatherName : "kim-ji-hyung",
        age : 26
    }
    
    const data1 = {
        name : "jangkook",
        fatherName : "kim-ji-hyung",
        age : 23
    }
    
    ans = {
        name : {
            old : "teahyung",
            new : "jangkook"
        },
        age : {
            old : 26,
            new : 23
        }
    }
    
    2 回复  |  直到 1 年前
        1
  •  0
  •   dhrupal khtrani Ranork    1 年前
    function compareData(data, data1) {
        const ans = {};
        for (const key in data) {
            if (data[key] !== data1[key]) {
                ans[key] = { old: data[key], new: data1[key] };
            }
        }
        return ans;
    }
    
    const data = { name: "teahyung", fatherName: "kim-ji-hyung", age: 26 };
    const data1 = { name: "jangkook", fatherName: "kim-ji-hyung", age: 23 };
    
    const ans = compareData(data, data1);
    console.log(ans);
    

    此函数接受data和data1对象,并将这两个对象之间的差异作为一个名为ans的对象返回。该函数检查数据对象中的每个键,如果data和data 1中的值不同,则将该键的新旧值添加到ans对象中。

        2
  •  0
  •   Mr. Polywhirl    1 年前

    您应该创建一个函数,该函数接受 original updated 物体。

    此功能将:

    • 循环更新的密钥
    • 检查原件是否有钥匙,如果数值不同
    • 将新的键值对添加到结果中

    const
      originalData = { name : "teahyung", fatherName : "kim-ji-hyung", age : 26 },
      updatedData  = { name : "jangkook", fatherName : "kim-ji-hyung", age : 23 };
    
    const diff = (original, updated) => {
      const result = {};
      for (let key in updated) {
        if (original.hasOwnProperty(key) && original[key] !== updated[key]) {
         result[key] = { old: original[key], new: updated[key] };
        }
      }
      return result;
    };
    
    const ans = diff(originalData, updatedData);
    
    console.log(ans);
    .as-console-wrapper { top: 0; max-height: 100% !important; }

    以下是一种更实用的方法:

    const
      originalData = { name : "teahyung", fatherName : "kim-ji-hyung", age : 26 },
      updatedData  = { name : "jangkook", fatherName : "kim-ji-hyung", age : 23 };
    
    const diff = (original, updated) => Object.fromEntries(Object.keys(updated)
      .filter((k) => original.hasOwnProperty(k) && original[k] !== updated[k])
      .reduce((r, k) => r.set(k, { old: original[k], new: updated[k]}), new Map));
    
    const ans = diff(originalData, updatedData);
    
    console.log(ans);
    .作为控制台包装{顶部:0;最大高度:100%!重要;}