两个对象之间的一般深度差异

两个对象之间的一般深度差异,第1张

两个对象之间的一般深度差异

我写了一个小班,可以做您想做的事,您可以在这里进行测试。

与您的建议唯一不同的是,我认为不

[1,[{c: 1},2,3],{a:'hey'}] and [{a:'hey'},1,[3,{c:1},2]]
一样,因为我认为如果数组的元素顺序不相同,数组就不相等。当然,如果需要,可以更改。同样,可以进一步增强此代码以将函数用作参数,该参数将用于基于传递的原始值以任意方式格式化diff对象(现在,此工作由“
comparevalues”方法完成)。

var deepDiffMapper = function () {  return {    VALUE_CREATED: 'created',    VALUE_UPDATED: 'updated',    VALUE_DELETED: 'deleted',    VALUE_UNCHANGED: 'unchanged',    map: function(obj1, obj2) {      if (this.isFunction(obj1) || this.isFunction(obj2)) {        throw 'Invalid argument. Function given, object expected.';      }      if (this.isValue(obj1) || this.isValue(obj2)) {        return {          type: this.comparevalues(obj1, obj2),          data: obj1 === undefined ? obj2 : obj1        };      }      var diff = {};      for (var key in obj1) {        if (this.isFunction(obj1[key])) {          continue;        }        var value2 = undefined;        if (obj2[key] !== undefined) {          value2 = obj2[key];        }        diff[key] = this.map(obj1[key], value2);      }      for (var key in obj2) {        if (this.isFunction(obj2[key]) || diff[key] !== undefined) {          continue;        }        diff[key] = this.map(undefined, obj2[key]);      }      return diff;    },    comparevalues: function (value1, value2) {      if (value1 === value2) {        return this.VALUE_UNCHANGED;      }      if (this.isDate(value1) && this.isDate(value2) && value1.getTime() === value2.getTime()) {        return this.VALUE_UNCHANGED;      }      if (value1 === undefined) {        return this.VALUE_CREATED;      }      if (value2 === undefined) {        return this.VALUE_DELETED;      }      return this.VALUE_UPDATED;    },    isFunction: function (x) {      return Object.prototype.toString.call(x) === '[object Function]';    },    isArray: function (x) {      return Object.prototype.toString.call(x) === '[object Array]';    },    isDate: function (x) {      return Object.prototype.toString.call(x) === '[object Date]';    },    isObject: function (x) {      return Object.prototype.toString.call(x) === '[object Object]';    },    isValue: function (x) {      return !this.isObject(x) && !this.isArray(x);    }  }}();var result = deepDiffMapper.map({  a: 'i am unchanged',  b: 'i am deleted',  e: {    a: 1,    b: false,    c: null  },  f: [1, {    a: 'same',    b: [{      a: 'same'    }, {      d: 'delete'    }]  }],  g: new Date('2017.11.25')}, {  a: 'i am unchanged',  c: 'i am created',  e: {    a: '1',    b: '',    d: 'created'  },  f: [{    a: 'same',    b: [{      a: 'same'    }, {      c: 'create'    }]  }, 1],  g: new Date('2017.11.25')});console.log(result);


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5432262.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存