判断两个键值对对象是否相等,分两种情况:
1、考虑属性顺序
2、不考虑属性顺序;
考虑属性顺序,即完全相等,那相对简单:
首先,我们先来判断一个对象是否键值对对象;
function isPlainObject(obj){
return typeof obj === 'object' && Object.prototype.toString.call(obj) === '[object Object]'
}
属性个数是否相同:
function getObjectLen(obj){
return Object.keys(obj).length
}
第一种,两个对象完全相等(包括属性顺序):
function isEqualObject(obj1, obj2){
return isPlainObject(obj1) &&
isPlainObject(obj2) &&
getObjectLen(obj1) === getObjectLen(obj2) &&
JSON.stringify(obj1) === JSON.stringify(obj2)
}
第二种,两个对象属性相等,但顺序不相同:
function isEqualObject(obj1, obj2){
if( !isPlainObject(obj1) || !isPlainObject(obj2) ){
return obj1 === obj2
}
if(getObjectLen(obj1) !== getObjectLen(obj2)){
return false
}
for(let key in obj1){
if( isPlainObject(obj1[key]) && isPlainObject(obj2[key]) ){
if(!isEqualObject(obj1[key], obj2[key])){
return false
}
}else if(obj1[key] !== obj2[key]){
return false
}
}
return true
}
今天就到这里,赶紧试试吧