js中的對象數組類型數據對比


// 比較兩個對象是否相同
function compareObj(obj, newObj) {
            let flag = true;
            if (Object.keys(obj).length != Object.keys(newObj).length) {
                return false;
            }
            for (let key in obj) {
                
                if (Array.isArray(obj[key])) {
                    console.log(key, obj[key])
                    flag = compareArr(obj[key], newObj[key])
                    if (!flag) {
                        break;
                    }
                }
                else if (obj[key] instanceof Object) {
                   
                    flag = compareObj(obj[key], newObj[key]);
                    if (!flag) {
                        break;
                    }
                } else if (obj[key] != newObj[key]) {
                    flag = false;
                    break;
                }
            }
            return flag
        }

// 比較兩個數組是否相同
function compareArr(arr, newArr) {
            let flag = true;
            if (arr.length != newArr.length) {
                return false;
            }
            for (let i = 0, n = arr.length; i < n; i++) {
                if (arr[i] instanceof Array) {
                    flag = compareArr(arr[i], newArr[i])
                    if (!flag) {
                        break;
                    }
                } else if (arr[i] instanceof Object) {
                    flag = compareObj(arr[i], newArr[i])
                    if (!flag) {
                        break;
                    }
                } else if (arr[i] != newArr[i]) {
                    flag = false;
                    break;
                }
            }
            return flag;
        }

值得注意的是 Array instanceof Object 和 Array instanceof Array返回的都是true,因此如果用instanceof方法來判斷數據類型時,要先判斷是否為數組

補充:一個規則的亂序數組對比

function compareArr(arr, newArr, id) {
            let tmp = [];
            if (arr.length != newArr.length) {
                return false;
            } else {
                for (let i = 0; i < arr.length; i++) {
                    for (let j = 0; j < newArr.length; j++) {
                        if (arr[i][id] == newArr[j][id]) {
                            tmp.push(i)
                        }
                    }
                }
                if (tmp.length == arr.length) {
                    return true;
                } else {
                    return false;
                }
            }

        }

 


免責聲明!

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



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