zoukankan      html  css  js  c++  java
  • JS深度判断两个对象字段相同

    代码:

    /**
     * 判断此对象是否是Object类型
     * @param {Object} obj  
     */
    function  isObject(obj){
        return Object.prototype.toString.call(obj)==='[object Object]';
    };
    /**
     * 判断此类型是否是Array类型
     * @param {Array} arr 
     */
    function isArray(arr){
        return Object.prototype.toString.call(arr)==='[object Array]';
    };
    /**
     *  深度比较两个对象是否相同
     * @param {Object} oldData 
     * @param {Object} newData 
     */
    function equalsObj(oldData,newData){
        //       类型为基本类型时,如果相同,则返回true
         if(oldData===newData)return true;
         if(isObject(oldData)&&isObject(newData)&&Object.keys(oldData).length === Object.keys(newData).length){
             //      类型为对象并且元素个数相同
    
             //      遍历所有对象中所有属性,判断元素是否相同
             for (const key in oldData) {
                 if (oldData.hasOwnProperty(key)) {
                     if(!equalsObj(oldData[key],newData[key]))
                        //      对象中具有不相同属性 返回false
                         return false;
                 }
             }
         }else if(isArray(oldData)&&isArray(oldData)&&oldData.length===newData.length){
             //      类型为数组并且数组长度相同
    
             for (let i = 0,length=oldData.length; i <length; i++) {
                if(!equalsObj(oldData[i],newData[i]))
                //      如果数组元素中具有不相同元素,返回false
                return false;
             }
         }else{
              //      其它类型,均返回false
              return false;
         }
        
         //      走到这里,说明数组或者对象中所有元素都相同,返回true
         return true;
    };
    
    
    

    测试:

    var oldArr = [1,2,
       [
        {
            name:"张三",
            age:11,
        }
       ],
        {
            name:'李四',
            age:21,
            em:[
                {
                    address:'邯郸',
                    phone:'123'
                },
                {
                    address:'北京',
                    phone:234
                }
            ]
        }
    ];
    var newArr = [1,2,
        [
            {
                name:"张三",
                age:11
            }
        ],
        {
            name:'李四',
            age:21,
            em:[
                {
                    address:'邯郸',
                    phone:'123'
                },
                {
                    address:'北京',
                    phone:234
                }
            ]
        }
    ];
    
    console.log(equalsObj(oldArr,newArr));
    
  • 相关阅读:
    纪念一下Jerry
    在中信66楼微软Offic参加讲座
    关于地理信息信息点数据采集一些方法
    简单的C#进行图片操作
    PHP访问C#建立的Webservice
    搜索引擎一:介绍
    介绍一况挺好用的Javascript编辑器(带项目)
    服务器不支持WebResource.axd的特殊处理
    Daily Web Words
    php psr 编码规范(PSR[04])
  • 原文地址:https://www.cnblogs.com/yan7/p/9828493.html
Copyright © 2011-2022 走看看