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));
    
  • 相关阅读:
    【WIN10】我的第一個WIN10-UWP應用——古文觀止
    【WIN10】文本圖標
    【WIN10】VisualStateManager使用說明
    【WIN10】Storyboard動畫板
    【WIN10】Bind、Binding與Converter的使用
    struts执行过程
    在jsp中的局部和全局变量
    jsp页面中的:<%@ page contentType="text/html; charset=utf-8" language="java"%>的作用及含义
    jsp中的this
    在Java接口中怎样访问定义的常量呢?
  • 原文地址:https://www.cnblogs.com/yan7/p/9828493.html
Copyright © 2011-2022 走看看