数组的扁平化处理是将多维数组转换成一维数组的形式。比如数组
[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];