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));
    
  • 相关阅读:
    loglikelihood ratio 相似度
    实例详解机器学习如何解决问题
    【特征工程】特征选择与特征学习
    基于贝叶斯的文本分类实战
    转 :scikit-learn的GBDT工具进行特征选取。
    QT静态库和动态库的导出
    C#.NET为List加入扩展方法:获取唯一值
    caffe卷积层代码阅读笔记
    UVa 11300
    zoj 3882 Help Bob(zoj 2015年7月月赛)
  • 原文地址:https://www.cnblogs.com/yan7/p/9828493.html
Copyright © 2011-2022 走看看