两个对象之间比较的话,用 === 会返回false 因为两个对象的地址不相同
所以需要写一个可以比较对象是否全部相等的函数
//判断类型是否是函数或者数组
function isObject(obj) {
return typeof(obj) === 'object' && obj !== null
}
function isEqual(obj1,obj2) {
//简单类型
if(!isObject(obj1) || !isObject(obj2)) {
return obj1 === obj2
}
//如果 obj1和obj2为同一个对象
if(obj1 === obj2) {
return true
}
//两个obj都是对象或者是数组,且不相等
//1、 先取出 obj1和 obj2的 keys,比较个数
const obj1Keys = Object.keys(obj1)
const obj2Keys = Object.keys(obj2)
if(obj1Keys.length !== obj2Keys.length) {
return false
}
//2、 以 obj1为基准,和 obj2依次递归比较
for(let key in obj1) {
//比较当前的 key的 val ——递归
const res = isEqual(obj1[key], obj2[key])
if(!res) {
return false
}
}
//3、 全相等
return true
}
//test
const obj1 = {
a:100,
b: {
c:200,
d:300
}
}
const obj2 = {
a:100,
b: {
c:200,
d:300
}
}
console.log(isEqual(obj1,obj2));
- 本文链接:http://horry233.github.io/2021/02/07/%E6%89%8B%E5%86%99-%E5%88%A4%E6%96%AD%E5%AF%B9%E8%B1%A1%E5%85%A8%E7%9B%B8%E7%AD%89%E5%87%BD%E6%95%B0/
- 版权声明:本博客所有文章除特别声明外,均默认采用 许可协议。
若没有本文 Issue,您可以使用 Comment 模版新建。
GitHub Issues