题目:手写深度比较,执行深比较来确定两者的值是否相等, 模拟lodash的isEqual,例如如下效果
lodash的isEqual方法文档
const obj1 = {a: 10, b: {x: 100, y: 200}}
const obj2 = {a: 10, b: {x: 100, y: 200}}
obj1 === obj2
isEqual(obj1, obj2) === true
代码实现如下
function isObject(obj) {
return typeof obj === 'object' && obj !== null
}
function isEqual(obj1, obj2) {
if (!isObject(obj1) || !isObject(obj2)) {
return obj1 === obj2
}
if (obj1 === obj2) {
return true
}
const obj1Keys = Object.keys(obj1)
const obj2Keys = Object.keys(obj2)
if (obj1Keys.length !== obj2Keys.length) {
return false
}
for (let key in obj1) {
const res = isEqual(obj1[key], obj2[key])
if (!res) {
return false
}
}
return true
}
归纳总结
- 编写函数的时候需要进行边界判断,非object类型的变量,使用===进行判断
- 判断两个参数是否是一个变量,使用===判断返回true
- 对比两个参数的属性数量,不同那么直接返回false
- 深度递归对比每个属性值,如果有不同,那么return false;都相同,最终return true