手写lodash.isEqual() 判断两个对象属性值是否相等
程序员文章站
2022-04-09 20:08:17
...
先定义两个对象
const obj1 = {
a: 100,
b: {
x: 100,
y: 200
}
}
const obj2 = {
a: 100,
b: {
x: 100,
y: 200
}
}
是否为对象
function isObject(obj) {
return typeof obj === 'object' && obj !== null
}
isEqual方法
function isEqual(obj1, obj2) {
// 如果其中没有对象
if (!isObject(obj1) || !isObject(obj2)) {
//值类型
return obj1 === obj2
}
// 如果特意传的就是两个指向同一地址的对象
if (obj1 === obj2) {
return true
}
// 两个都是对象或者数组,而且不相等
// 拿到对象key
let obj1Keys = Object.keys(obj1)
let obj2Keys = Object.keys(obj2)
// 先判断长度就可以过滤一些
if (obj1Keys.length !== obj2Keys.length) {
return false
}
// 以obj1为基准 和 obj2 一次递归比较
for (let key in obj1) {
// 递归比较当前每一项
const res = isEqual(obj1[key], obj2[key])
// 如果碰到一个不一样的就返回 false
if (!res) {
// 跳出for循环
return false
}
}
// 否则全相等
return true
}
//console.log(isEqual(obj1, obj2)) true
上一篇: 数据库事务的四个特性及含义【详解】
下一篇: JS判断两个对象是否相等