数组的扁平化处理

数组的扁平化处理是将多维数组转换成一维数组的形式。比如数组
[1, 2, 3, [4, 5], {}, null, [[6, 7], [[[[8]]], 9]]]扁平化处理后——>[1, 2, 3, 4, 5, {}, null, 6, 7, 8, 9]
下面这些方法可以实现数组的扁平化。

        var originArr = [1, 2, 3, [4, 5], {}, null, [[6, 7], [[[[8]]], 9]]];

1、循环判断

        function flatten(arr) {
            var len = arr.length,
                resultArr = [];
            for (var i = 0; i < len; i++) {
            	//可以直接使用Array.isArray(arr[i])
                if (Object.prototype.toString.call(arr[i]) == '[object Array]') {
                    resultArr = resultArr.concat(flatten(arr[i]));
                } else {
                    resultArr.push(arr[i]);
                }
            }
            return resultArr;
        }

        Array.prototype.flatten = function () {
            var len = this.length,
                resultArr = [];
            this.forEach(function (cur) {
                if (Object.prototype.toString.call(cur) == '[object Array]') {
                    resultArr = resultArr.concat(flatten(cur));
                } else {
                    resultArr.push(cur);
                }
            });
            return resultArr;
        }
        //originArr.flatten(): [1, 2, 3, 4, 5, {…}, null, 6, 7, 8, 9]
        //flatten(originArr):[1, 2, 3, 4, 5, {…}, null, 6, 7, 8, 9]

2、利用reduce方法

        //利用reduce方法
        function flatten2(arr) {
            return arr.reduce(function (prev, cur) {
                prev = Object.prototype.toString.call(cur) == '[object Array]' ?
                    prev.concat(flatten2(cur)) : prev.concat(cur);
                return prev;
            }, []);
        }

        //es6箭头函数
        var targetArr = originArr.reduce((prev, cur) =>
            prev = Object.prototype.toString.call(cur) == '[object Array]' ?
                prev.concat(flatten2(cur)) : prev.concat(cur), []);

        //flatten2(originArr):[1, 2, 3, 4, 5, {}, null, 6, 7, 8, 9]
        //targetArr:[1, 2, 3, 4, 5, {}, null, 6, 7, 8, 9];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值