对象或者数组相等

实现一个方法,只要内容形态一致,则认为数组或对象相等
let obj1 = {a:[1,'2'],b:2};
let obj2 = {b:2,a:[1,'2']};
let arr1 = [1,2,{a:{c:1},b:2},'miya'];
let arr2 = [1,2,{b:2,a:{c:1}},"miya"];
var obj3 = {a:[1,'2',{name:'miya',age:18}],b:{c:[3,1,2]}};
var obj4 = {b:{c:[3,1,2]},a:[1,'2',{age:18,name:'miya'}]};
//比如上面的
obj1 === obj2
arr1 === arr2
obj3 === obj4

答案:

function eql01(obj1,obj2){
    if(Object.prototype.toString.call(obj1) !== Object.prototype.toString.call(obj2)){
        return false;
    }
    let sortObj = (r1,r2)=>{
        let obj = {}
        for(var i in r1){
            if(!r2[i]) return false;
            obj[i] = r2[i];
        }
        Object.assign(obj,r2);
        return obj;
    }
    if(Array.isArray(obj1)){
        obj1.map((val,key)=>{
         if(Object.prototype.toString.call(val) === "[object Object]"){
            let ss = sortObj(val,obj2[key]);
            obj2[key] = ss;            
         }
      })
    }else{
        let gg = sortObj(obj1,obj2);
        obj2 = gg;
    }    
    return JSON.stringify(obj1) === JSON.stringify(obj2);
}

eql02应该是最终版本了

function eql02(obj1,obj2){
    if(Object.prototype.toString.call(obj1) !== Object.prototype.toString.call(obj2)){
        return false;
    }
    if(Array.isArray(obj1)){
        obj1.map((val,key)=>{
            if(Object.prototype.toString.call(val) === "[object Object]"){
                    obj2[key] = Object.assign(val,obj2[key]);
            }
        })
    }else{
        obj2 = Object.assign(obj1,obj2);
    }
    return JSON.stringify(obj1) === JSON.stringify(obj2);
}

如果你有更好的答案,请在下方留言加入讨论!谢谢

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,935评论 1 45
  • 十月过去,迎来十一月,告别十一月后,进入象征冬季的十二月。 如此迎来送往,日复一日。我在台历上圈下即将消失的今天,...
    感叔阅读 236评论 0 0
  • 人际关系 看孩子跳舞,跟老师沟通跳舞情况; 今日计划 售电功能完善思考,系统培训交流;日更,回家做顿好吃的,一起画...
    乔胖子阅读 269评论 0 0
  • 人人都知道生孩子很痛很痛,痛到什么程度呢?————十二对肋骨一一骨折。 可是,可怜天下父母心,为了孩子,只要条件允...
    yoyo_duo阅读 830评论 0 15