JavaScript数据处理之扁平化(数组)
发布日期:2021-05-07 01:26:36 浏览次数:21 分类:精选文章

本文共 2910 字,大约阅读时间需要 9 分钟。

数组扁平化方法与实现

数组扁平化方法与实现

数组的扁平化是将嵌套层数多的数组展平成一层数组

例如:

                    var arr = [1,2,3,[4,5,66],[4343,[22,3,4,5,[2,'ggg',['dd','aa',['qqq','www','eee'],'zzz']]],55353,[1,2,34,6,7],55];

扁平化后的结果为:

                    var ans = [1, 2, 3, 4, 5, 66, 4343, 22, 3, 4, 5, 2, "ggg", "dd", "aa", "qqq", "www", "eee", "zzz", 55353, 1, 2, 34, 6, 7, 55];

常见实现方法

递归遍历实现

                    function isArray(obj) {
return Object.prototype.toString.call(obj) == '[object Array]';
}
function flatten(arr) {
var arr = arr || [], resArr = [], len = arr.length;
for (var i = 0; i < len; i++) {
if (isArray(arr[i])) {
resArr = resArr.concat(flatten(arr[i]));
} else {
resArr.push(arr[i]);
}
}
return resArr;
}

原型链实现

                    Array.prototype.flatten = function() {
var resArr = [];
this.forEach(function(item) {
if (Object.prototype.toString.call(item) == '[object Array]') {
return item.flatten().concat(resArr);
} else {
resArr.push(item);
}
});
return resArr;
};

使用reduce实现

                    function flatten1(arr) {
var res = arr || [];
return res.reduce(function(prev, next) {
return Object.prototype.toString.call(next) == '[object Array]'
? prev.concat(flatten1(next))
: prev.concat(next);
}, []);
}

ES6.0语法实现

                    const flatten2 = arr => arr.reduce((prev, next) => {
return Object.prototype.toString.call(next) == '[object Array]'
? prev.concat(flatten2(next))
: prev.concat(next);
}, []);
上一篇:js 函数式编程之柯里化
下一篇:RegExp正则表达式-基本语法

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2025年04月01日 14时08分11秒