如何判断两个对象全等复杂数据判断

如何判断两个对象全等复杂数据判断

如何判断两个对象全等复杂数据判断

方法1

在这里插入代码片/**
 * 判断两个对象是否相同
 * @param {Object} a 要比较的对象一
 * @param {Object} b 要比较的对象二
 * @returns {Boolean} 相同返回 true,反之 false
 */
export function isObjectValueEqual(a: { [key: string]: any }, b: { [key: string]: any }) {
  if (!a || !b) return false;
  let aProps = Object.getOwnPropertyNames(a);
  let bProps = Object.getOwnPropertyNames(b);
  if (aProps.length != bProps.length) return false;
  for (let i = 0; i < aProps.length; i++) {
    let propName = aProps[i];
    let propA = a[propName];
    let propB = b[propName];
    if (!b.hasOwnProperty(propName)) return false;
    if (propA instanceof Object) {
      if (!isObjectValueEqual(propA, propB)) return false;
    } else if (propA !== propB) {
      return false;
    }
  }
  return true;
}

方法2

递归 function deepEqual(obj1, obj2) { 
// 递归函数,用于深度比较两个对象 
function _deepEqual(obj1, obj2) { if (obj1 === obj2) return true; 
// 基本相等判断 
if (typeof obj1 !== 'object' || obj1 === null || typeof obj2 !== 'object' || obj2 === null) return false; 
// 非对象或null则不相等 
let keys1 = Object.keys(obj1); 
// 获取属性名 
let keys2 = Object.keys(obj2); 
// 获取属性名 
if (keys1.length !== keys2.length) return false; 
// 属性数量不同则不相等 
for (let key of keys1) { 
// 遍历属性名 
if (!_deepEqual(obj1[key], obj2[key])) 
return false; 
// 递归比较属性值 
} return true; 
// 所有属性都相等 
} 
return _deepEqual(obj1, obj2); // 调用递归函数进行比较 
}

方法3

/**
   * 工具函数 compare 判别标准:对比两个对象 对象的属性相同 那么对象就是相同
   */
  public compare(obj1: any, obj2: any): boolean {
    if (typeof obj1 !== 'object' || typeof obj2 !== 'object' || obj1 == null || obj2 == null) {
      return obj1 === obj2;
    }
    //DISABLE console.log("正在对比",obj1,obj2)
    let keys = Object.keys(obj1);
    let keysOther = Object.keys(obj2);
    if (keys.length != keysOther.length) {
      //DISABLE console.log('false from keys length')
      return false;
    }
    for (let key of keys) {
      if (typeof obj1[key] === 'object') {
        if (!this.compare(obj1[key], obj2[key])) {
          //DISABLE console.log("false from obj",key,obj1[key], obj2[key])
          return false;
        }
      } else if (obj1[key] != obj2[key]) {
        //DISABLE console.log("false from val",key,obj1[key],obj2[key])
        return false;
      }
    }
    //对比完成
    return true;
  }

方法4

function checkObject(a, b) {
				if (!a || !b) return a === b;
				return JSON.stringify(a) === JSON.stringify(b)
			}
  • 10
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

下一站丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值