// 判断是否为 'object' (注意:这里typeof检测类型 对象数组都会返回'object')
function isObject (obj) {
return typeof obj === 'object' && obj !== null
}
function isEqual(obj1, obj2){
if(!isObject(obj1) || !isObject(obj2) ){
// 说明是至少有一个值类型数据 可直接比较 return
return obj1 === obj2
}
// 如果传的两个值一模一样 例如: isEqual(obj1, obj1)
if(obj1===obj2){
return true
}
// 两个都是数组或对象且不相等
const obj1Keys= Object.keys(obj1)
const obj2Keys= Object.keys(obj2)
if(obj1Keys.length !== obj2Keys.length){
return false
}
// 以obj1为基准 递归比较
for (let key in obj1) {
const res= isEqual(obj1[key], obj2[key])
if(!res){
return false
}
}
// 全相等
return true
}
// 测试数据
const obj1 = {
a: 100,
b: {
x: 100,
y: 200
}
}
const obj2 = {
a: 100,
b: {
x: 100,
y: 200
}
}
console.log(isEqual( obj1, obj2 )) // true
深度比较两个对象或数组的值是否相等
于 2024-03-22 11:43:14 首次发布