最近发现,数组扁平化在面试笔试中出现平率很高~
1、数组扁平化是指将一个多维数组变为一维数组
2、数组扁平化的五种方法
(1)reduce()
reduce()函数:接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值;
语法:array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
total:必需。初始值, 或者计算结束后的返回值;
currentValue:必需。当前元素;
currentIndex:可选,当前元素的索引;
arr:可选,当前元素所属的数组;
initialValue:可选,传递给函数的初始值;
function flatten(arr) {
return arr.reduce((result, item)=> {
return result.concat(Array.isArray(item) ? flatten(item) : item);
}, []);
}
arr1 = [1, [2, 3, [4, 5]]];
var array = flatten(arr1);
console.log(array);
//[1,2,3,4,5]
(2)toString()和split方法结合使用
先将多维数组通过toString()方法转化为字符串,然后用逗号隔开,最后将每一项转化为数值。
function flatten(arr) {
return arr.toString().split(',').map(function(item) {
//return Number(item);
return parseInt(item);
})
}
arr1 = [1, [2, 3, [4, 5]]];
var array = flatten(arr1);
console.log(array);
//[1,2,3,4,5]
(3)join() & split()结合使用
思路和toString()的思路一样
function flatten(arr) {
return arr.join(',').split(',').map(function(item) {
return parseInt(item);
})
}
arr1 = [1, [2, 3, [4, 5]]];
var array = flatten(arr1);
console.log(array);
//[1,2,3,4,5]
(4)递归
递归的遍历每一项,若为数组则继续遍历,否则concat
function flatten(arr) {
var res = [];
arr.map(item => {
if(Array.isArray(item)) {
res = res.concat(flatten(item));
} else {
res.push(item);
}
});
return res;
}
arr1 = [1, [2, 3, [4, 5]]];
var array = flatten(arr1);
console.log(array);
//[1,2,3,4,5]
(5)ES6的扩展运算符
es6的扩展运算符能将二维数组变为一维
[].concat(...[1, 2, 3, [4, 5]]); // [1, 2, 3, 4, 5]
参考文档:https://www.cnblogs.com/wind-lanyan/p/9044130.html