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));
    
  • 相关阅读:
    SQL Server 2005: About login password hashes
    record drop database in sql log
    一些锁的示例
    find the physical location for specified data row
    运行sp_xp_cmdshell_proxy_account 出现的错误
    删除用户出现的错误
    conversion to dalvik format failed with error 1
    文章标题 标签提取
    in order to continue installation,please close the following application;
    提示找不到 C:\Program Files\VMware\dndlogs\dndlog.conf
  • 原文地址:https://www.cnblogs.com/yan7/p/9828493.html
Copyright © 2011-2022 走看看