javascript 比较两个数组和两个对象,包括嵌套的数组和深度的对象

export  let isArrayEqual =  function(arrya1: any[], array2: any[]){
    if (!arrya1 || !array2)
        return  false;
    // 比较长度
    if (arrya1.length != array2.length)
        return  false;
    for ( let i =  0, l = arrya1.length; i < l; i++) {
        // 检查是否是嵌套数组
        if (arrya1[i]  instanceof Array && array2[i]  instanceof Array) {
        // 这里递归判断嵌套数组
            if (!isArrayEqual.call( this, arrya1[i], array2[i]))
                return  false;
        }
        else  if (arrya1[i] != array2[i]) {
            // 注意: {x:20} != {x:20}对象不等于对象
            return  false;
        }
    }
    return  true;
}

export  let isObjectEqual =  function(object1:any, object2:any){
    //首先检查对象的类型
    for ( let propName  in object1) {
    //是否拥有相同的属性
        if (object1.hasOwnProperty(propName) != object2.hasOwnProperty(propName)) {
            return  false;
        }
    /    /检查实例的类型
        else  if ( typeof object1[propName] !=  typeof object2[propName]) {
            return  false;
        }
    }
    //检车对象是否有更深的属性
    for( let propName  in object2) {
        //检查对象的原型链属性
        if (object1.hasOwnProperty(propName) != object2.hasOwnProperty(propName)) {
            return  false;
        }
        else  if ( typeof object1[propName] !=  typeof object2[propName]) {
            return  false;
        }
        //如果属性是从原型链继承的
        if(!object1.hasOwnProperty(propName))
            continue;
        //如果实例是数组
        if (object1[propName]  instanceof Array && object2[propName]  instanceof Array) {
            // 使用上面比较数组的方法
            if (!isArrayEqual.call( this, object1[propName], object2[propName]))
                return  false;
        }
        else  if (object1[propName]  instanceof Object && object2[propName]  instanceof Object) {
            if (!isObjectEqual.call( this, object1[propName], object2[propName]))
                return  false;
        }
        //正常比较两个值
        else  if(object1[propName] != object2[propName]) {
            return  false;
        }
    }
    //所有事情都没有则可以使用
    return  true;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值