判断两个数组是否相等以及 判断两个对象是否相等

本来只打算写一个判断数组的方法,结果发现数组里可能有对象,还得判断两个对象是否相等,然而对象里面也有可能有数组,所以两个方法相辅相成,缺一不可(aa:判断数组,bb:判断对象,本人英语水平有限就不用单词了。另外这里的对比不考虑对象或者数组里面含有function的情况。欢迎指正)    

 function myTypeOf(obj) { // 判断数据类型

            return Object.prototype.toString.call(obj)

        }

        function bb(obj1, obj2) { // 判断两个对象每一项的值是否相等

            var res = true

            // debugger

            for (var key in obj1) {

                var cur = obj1[key]

                var type = myTypeOf(cur)

                if (type !== myTypeOf(obj2[key])) {

                    return false

                }

                if (type.indexOf('Object') > -1) {

                    for (var k in cur) {

                        res = bb(cur[k], obj2[k])

                        if (res === false) {

                            return false

                        }

                    }

                } else if (type.indexOf('Array') > -1) {

                    res = aa(cur, obj2[key])

                    if (res === false) {

                        return false

                    }

                } else {

                    if (cur !== obj2[key]) {

                        return false

                    }

                }

            }

            return res

        }

        function aa(arr1, arr2) { // 判断两个数组每一项的值是否相等

            var res = true

            // debugger

            if (arr1.length !== arr2.length) {

                return false

            }

            for (var i = 0; i < arr1.length; i++) {

                var cur = arr1[i]

                var type = myTypeOf(cur)

                if (type !== myTypeOf(arr2[i])) {

                    return false

                }

                if (type.indexOf('Object') > -1) {

                    res = bb(cur, arr2[i])

                    if (res === false) {

                        return false

                    }

                } else if (type.indexOf('Array') > -1) {

                    res = aa(cur, arr2[i])

                    if (res === false) {

                        return false

                    }

                } else {

                    if (cur !== arr2[i]) {

                        return false

                    }

                }

            }

            return res

        }

 

        var arr = [1, { a: 1, b: 2 }, 1, [{ a: 1, b: '2', c: true, d: { a: 1, b: 2 } }]]

 

        var arr2 = [1, { b: 2, a: 1 }, [{ a: 1, b: '2', c: true, d: { a: 1, b: 2 } }], 1]

        console.log(aa(arr,arr2))

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值