如何判断两个对象全等复杂数据判断
如何判断两个对象全等复杂数据判断
方法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)
}