递归循环判断两个对象是否相等,对象值相等即可,对象key顺序可忽略 及:{a:1,b:2}==={b:2,a:1}
具体需要如下:
递归循环判断两个对象是否相等,对象值相等即可,对象key顺序可忽略 及:{a:1,b:2}==={b:2,a:1};
'100'与100相等;
'100.00' 与'100'相等;
null,undefined,'' 相等;
用递归实现的方法
贴代码啦~—~
function deepEqual(obj1, obj2) {
if (obj1 === obj2) return true
// 比较 '100'与100
if ((typeof obj1 === 'number' && typeof obj2 === 'string')
||(typeof obj1 === 'string' && typeof obj2 === 'number')) {
if (parseFloat(obj1) === parseFloat(obj2)) return true
}
// 比较 '100.00' 与'100'
if (!isNaN(obj1) && !isNaN(obj2) && parseFloat(obj1)
=== parseFloat(obj2)) return true
// 比较 undefined 与''
if ([null, undefined, ''].includes(obj1)
&& [null, undefined, ''].includes(obj2)) return true
// null,undefined,'' 相等
if (typeof obj1 !== 'object'
|| typeof obj2 !== 'object'
|| obj1 === null
|| obj2 === null) {
return false
}
const keys1 = Object.keys(obj1).sort()
const keys2 = Object.keys(obj2).sort()
if (keys1.length !== keys2.length) return false
for (let i = 0; i < keys1.length; i++) {
if (keys1[i] !== keys2[i]) return false
if (!deepEqual(obj1[keys1[i]], obj2[keys2[i]])) return false
}
return true
}