1.当对象只有1层的时候 只需要做下浅层对比就好了
shallowEqual=(...object)=>{ let firstObject=object[0] let flag=true object.map(item=>{ if(Object.keys(item).length !== Object.keys(firstObject).length){ return flag=false } }) if(!flag){ return flag } object.map(item=>{ let array=Object.keys(item) array.map(key=>{ if(item[key] !== firstObject[key]){ flag=false } }) }) return flag }
2.当对象属性中包含对象时,需要用深层比较
deepEqual=(...object)=>{ let firstObject=object[0] let flag=true object.map(item=>{ if(Object.keys(item).length !== Object.keys(firstObject).length){ flag=false } }) if(!flag){ return flag } for(let i=0 ; i<object.length;i++){ let array=Object.keys(object[i]) for(let j=0; j<array.length;j++){ // 1.判断当前比较的是否为对象 是就对比第一对象里的值是否也是对象 if(this.isObject(object[i][array[j]])){ //是对象 if(this.isObject(firstObject[array[j]])){ // 第一对象里对应的值也是对象 flag=this.deepEqual(object[i][array[j]],firstObject[array[j]]) }else{ flag=false } }else{ //不是对象 if(object[i][array[j]]!==firstObject[array[j]]){ flag=false } } if(!flag){ return flag } } if(!flag){ return flag } } return flag } isObject=(object)=>{ return object !==null && typeof object === 'object' }