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 = [{
                    name: "張三",
                    age: 11,
                },{
                    name: '李四',
                    age: 21,
                }];
            var newArr = [{
                    name: "張三",
                    age: 11
                },{
                    name: '王五',
                    age: 21,
                }];

            console.log(equalsObj(oldArr,newArr));// false

 


免責聲明!

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



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