快速获取两个对象之间的差异的方法

问题描述 投票:0回答:1

因为我的代码需要运行很多次,所以我需要一个非常快的代码来获取两个对象之间的差异。已删除的属性应具有“已删除”值。

示例:

对象1

{a: "hi", b: "hi", c: {o: "hi", p: "hi",}, d: ["hi", "bye"]}

对象2

{a: "hi", b: "bye", c: {o: "bye",}}

结果

{b: "bye", c: {o: "bye", p: "deleted"}, d: "deleted"}
javascript performance object difference
1个回答
0
投票

您可以使用一些递归函数来处理对象。不清楚是否也需要处理数组

const old = {a: "hi", b: "hi", c: {o: "hi", p: "hi",}, d: ["hi", "bye"]}
const cur = {a: "hi", b: "bye", c: {o: "bye",}};

const diff = (old, cur, result = {}) => {

  for(const k in old){
    if(!Object.is(old[k], cur[k])){
      if(k in cur){
        if(cur[k].__proto__.constructor.name === 'Object'){
          diff(old[k], cur[k], result[k] = {});  
        } else {
          result[k] = cur[k];
        }
      } else {
        result[k] = 'deleted';
      }
    }
  }
  
  return result;

};



console.log(diff(old, cur));

© www.soinside.com 2019 - 2024. All rights reserved.