1.===判断
使用 a=== b 完全比较,只能判断同一个引用的对象。内容一样的对象不能判断出来
let a = {name:'aa',age:10}
let b = {name:'aa',age:10}
let c = a
a === c //true 同一个内存引用地址
a === b //false 不同的堆数据
2.JSON.stringify()转化
JSON.stringify(a) === JSON.stirngify(b) ,只能是属性顺序一致的对象,有函数的情况也不能转字符串。
let a = {name:'aa',age:10}
let b = {name:'aa',age:10}
JSON.stringify(a) === JSON.stirngify(b) //true
let a = {name:'aa',age:10}
let b = {age:10,name:'aa'}
JSON.stringify(a) === JSON.stirngify(b) //false 序列化的内容顺序不一样
3.代码遍历判断
3.1 单层处理
let a = {name:'aa',age:10}
let b = {name:'aa',age:10}
function compare(a,b) {
const aKeys = Object.keys(a)
const bKeys = Object.keys(b)
if(aKeys.length !== bKeys.length) {
return false
}
for (let index = 0; index < aKeys.length; index++) {
const akey = aKeys[index]
if(a[akey] !== b[akey] ){
return false
}
}
return true
}
console.log(compare(a,b))
3.2 单层+对象 递归处理
let a = {name:'aa', c:{d:1} , age:10}
let b = {age:10,name:'aa', c:{d:1} }
function compareDeep(a,b) {
const aKeys = Object.keys(a)
const bKeys = Object.keys(b)
if(aKeys.length !== bKeys.length) {
return false
}
for (let index = 0; index < aKeys.length; index++) {
const akey = aKeys[index]
if(typeof a[akey] === 'object') {
if(!compareDeep(a[akey],b[akey])){
return false
}
}else {
if(a[akey] !== b[akey] ){
return false
}
}
}
return true
}
console.log(compareDeep(a,b))
3.3 函数 数组 对象 递归都处理
let a = {name:'aa', c:{d:1} , age:10 , d(params) {},arr:[1,2]}
let b = { name:'aa',age:10, c:{d:1} , d(params) {},arr:[1,2]}
function compareDeepAll(a,b) {
const aKeys = Object.keys(a)
const bKeys = Object.keys(b)
if (aKeys.length !== bKeys.length) {
return false
}
for (let index = 0; index < aKeys.length; index++) {
const akey = aKeys[index]
if(Object.prototype.toString.call(a[akey]) === '[object Array]'){ //处理数组的情况
if(a[akey].length !== b[akey].length) {
return false
}
let flag = a[akey].every((o,arrIndex) => {
if(typeof o === 'object' || typeof o === 'function' ){
if (!compareDeepAll(a[akey][arrIndex],b[akey][arrIndex])){
return false
}
}else{
if (a[akey][arrIndex] !== b[akey][arrIndex]) {
return false
}
}
return true
})
if(flag == false) {
return false
}
}
else if(typeof a[akey] === 'object') {
if (!compareDeepAll(a[akey],b[akey])){
return false
}
}else if(typeof a[akey] === 'function' ){
if (JSON.stringify(a[akey]) !== JSON.stringify(b[akey])){
return false
}
}else {
if (a[akey] !== b[akey]) {
return false
}
}
}
return true
}
console.log(compareDeepAll(a,b))