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));


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM