码迷,mamicode.com
首页 > 编程语言 > 详细

验证两个数组或者对象是否相同

时间:2019-11-18 12:49:16      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:eof   个人喜欢   cti   ceo   color   测试   div   length   ==   

/**
 * 验证两个object 是否相同
 * @param {Object} obj  [需要进行验证的数据1]
 * @param {Object} newObj [需要进行验证的数据2]
 */
function objSame (obj,newObj) {
    let bol = true;
    if (Object.keys(obj).length != Object.keys(newObj).length) {
        return false;
    }
    for(let key in obj) {
        if ( obj[key] instanceof Object) {
            bol = objSame(obj[key],newObj[key]);
            if (!bol) {
                break;
            }            
        } else if ( obj[key] instanceof Array) {
            bol = arrSame(obj[key],newObj[key]) 
            if (!bol) {
                break;
            }
        } else if (obj[key] != newObj[key]) {
            bol =  false;
            break;
        }
    }
    return bol
}

/**
 * 验证两个数组是否相同
 * @param {Array} arr  [需要进行验证的数据1]
 * @param {Array} newArr [需要进行验证的数据2]
 */
function arrSame (arr,newArr) {
    let bol = true;
    if (arr.length != newArr.length) {
        return false;
    }
    for (let i = 0, n = arr.length;i < n; i++) {
        if (arr[i] instanceof Array) {
            bol = arrSame(arr[i],newArr[i])
            if (!bol) {
                break;
            }
        } else if (arr[i] instanceof Object) {
            bol = objSame(arr[i],newArr[i])
            if (!bol) {
                break;
            }
        }else if (arr[i] != newArr[i]) {
            bol = false;
            break;
        }
    }
    return bol;
}

也可以单纯的使用 for  in :

/**
 * 验证两条数据是否相同
 * @param {Array | Object} arg1  [需要进行验证的数据1]
 * @param {Array | Object} arg2 [需要进行验证的数据2]
 */
function isSame (arg1,arg2) {
    let bol = true;
    if (Object.keys(arg1).length != Object.keys(arg2).length) {
        return false;
    }
    for (let key in arg1) {
        if (typeof arg1[key] == ‘object‘) {
            bol = isSame(arg1[key],arg2[key])
            if (!bol) {
                break;
            }
        } else if(arg1[key] != arg2[key]){
            bol = false;
            break;
        }
    }
    return bol 
}

我个人喜欢对数组使用for,对对象使用for in,以上代码只进行了粗略的测试,有什么问题欢迎指正,不胜感激。

验证两个数组或者对象是否相同

标签:eof   个人喜欢   cti   ceo   color   测试   div   length   ==   

原文地址:https://www.cnblogs.com/gionlee/p/11881127.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!