JS判断两个对象是否相等
① 方法一:通过JSON.stringify(obj)来判断两个对象转后的字符串是否相等优点:用法简单,对于顺序相同的两个对象可以快速进行比较得到结果缺点:这种方法有限制就是当两个对比的对象中key的顺序不是完全相同时会比较出错② 方法二:有递归的情况 ,对象里包含 对象 和 数组function isObjectValueEqual(a, b) {var aProps = Object.getO
① 方法一:通过JSON.stringify(obj)
来判断两个对象转后的字符串是否相等
优点:用法简单,对于顺序相同的两个对象可以快速进行比较得到结果
缺点:这种方法有限制就是当两个对比的对象中key的顺序不是完全相同时会比较出错
② 方法二:有递归的情况 ,对象里包含 对象 和 数组
function equals(a, b) {
let ArrayA = Object.getOwnPropertyNames(a)
let ArrayB = Object.getOwnPropertyNames(b)
if (ArrayA.length != ArrayB.length) return false
console.log(a)
for (let i = 0; i < ArrayA.length; i++) {
let propNameA = ArrayA[i]
let propNameB = ArrayB[i]
if (!a.hasOwnProperty(propNameB)) return false;
if(a instanceof Object){
if(equals(a[propNameA],b[propNameA])){
}else{ return false; }
}else{
if (a[propNameA]===b[propNameA]) {
}else{
return false;
}
}
return true;
步骤: 1. 判断对象属性的长度是否一致
2.for循环,判断A对象里是否包含B的属性
3.然后判断 A对象的属性是否是 对象属性,如果是,再调用一次本函数
4.判断A的属性值是否等于B的属性值
tip: 这里提示下:
1. keys() 输出为一个数组,取到的是 obj 的所有的自身可枚举属性。其功能和for in + hasOwnProperty()功能是一致的
2. getOwnPropertyNames() 输出为一个数组,取到的是 obj 的所有自身属性。(可枚举、不可枚举,但不包括symbol类型的属性)
3. getOwnPropertySymbol() 输出为一个数组,取到的是 obj 的所有自身的Symbol属性
4. for(key in obj) 遍历 obj 的所有属性,包括自身属性和原型上的所有可枚举的属性
5. JSON.stringify() 只能将自身的可枚举的属性转化成字符串
一般遍历的都是可枚举属性,且不包括Symbol,除了getOwnPropertyNames()。
更多推荐
所有评论(0)