zoukankan      html  css  js  c++  java
  • 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;
                    }
                }
    
            }
  • 相关阅读:
    SQLite剖析之异步IO模式、共享缓存模式和解锁通知
    SQLite剖析之动态内存分配
    SQLite剖析之锁和并发控制
    SQLite剖析之临时文件、内存数据库
    SQLite剖析之数据类型
    关于Docker目录挂载的总结(一)
    docker常用命令
    玩转docker(一)
    go hello
    术语“go”不被识别为cmdlet,函数,脚本文件或可操作程序的名称
  • 原文地址:https://www.cnblogs.com/thinkguo/p/15096042.html
Copyright © 2011-2022 走看看