使用最简单的方法判断两对象或数组是否相等
一、两对象是否相等
已知两纯对象
let a = { a: 1, b: 2 };
let b = { a: 1, b: 2 };
我们都知道 a == b ,返回 false ,我们要如何写一个方法,使得键值对都是一样的则认为两个对象是相等的?
方法如下:
let equalObject = (o1, o2) => {
//判断两变量类型是否一致 如果没有这个判断 [1, 2], { '0': 1, '1': 2 } 会返回true;
if (!(Object.prototype.toString.call(o1) == Object.prototype.toString.call(o2))) {
return false;
}
if (!(o1 instanceof Object) || !(o2 instanceof Object)) {
return false;
}
if (Object.keys(o1).length !== Object.keys(o2).length) {
return false;
}
return Object.keys(o1).every(v => o1[v] === o2[v]);
};
如果两对象是数组,equalObject(arr1,arr2) 方法同样适用;
二、 深度比较两对象或数组
实现一个方法,只要内容形态一致,则任务数组或对象相等,例如:
let a = { a: [1, '2'], b: 2 };
let b = { b: 2, a: [1, '2'] };
方法如下:
let equal = (o1, o2) => {
if (!(Object.prototype.toString.call(o1) == Object.prototype.toString.call(o2))) {
return false;
}
if (!(o1 instanceof Object) || !(o2 instanceof Object)) {
return false;
}
if (Object.keys(o1).length !== Object.keys(o2).length) {
return false;
}
return Object.keys(o1).every(v => {
if (o1[v] instanceof Object) {
return equal(o1[v], o2[v]);
} else {
return o1[v] === o2[v];
}
});
};
equal({ a: [1, '2'], b: 2 }, { b: 2, a: [1, '2'] }) //true