数组扁平化概念
就是将多层数组Aarray处理成一层数组,比如:
//原数组
var newArr = [[a,b],c,[d]]
//扁平化之后
var newArr = [a,b,c,d]
常见的数组扁平化方法
方法1:json和split来实现
先用JSON把数组变为字符串然后再用split分割为数组
let arr = [1,[2,3],[1,[1,2],88]]
let newArr = arr.join(',').split(',').map(Number)
console.log(newArr) //[1, 2, 3, 1, 1, 2, 88]
方法2:toString和split来实现
先用toString把数组变为字符串然后再用split分割为数组
let arr = [1,[2,3],[1,[1,2],88]]
let newArr = arr.toString().split(',').map(Number)
console.log(newArr) //[1, 2, 3, 1, 1, 2, 88]
方法3:ES6的扩展运算符concat
将数组内部展开,通过concat连接两个字符串的方式返回一个新的数组
function flatten(arr) {
while(arr.some(item=>Array.isArray(item))) {
arr = [].concat(...arr);
}
return arr;
}
let newArr = [12, 3, 45, [6, 7, 8]]
flatten(newArr) // [1, 2, 3, 1, 1, 2, 88]
方法4:reduce方法
遍历数组每一项,若值为数组则递归遍历,否则concat
function flatten(arr) {
return arr.reduce((result, element)=> {
return result.concat(Array.isArray(element) ? flatten(element) : element);
}, []);
}
方法4:递归
判断获取的当前值是不是数组,是数组就递归调用
let arr = [1,[2,3],[1,[1,2],88]]
let d = [];
let flntten = arr => {
for (let i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
fn(arr[i]);
} else {
d.push(arr[i]);
}
}
}
flntten(arr)
console.log(d) // [1, 2, 3, 1, 1, 2, 88]