扁平化
数组的扁平化其实就是将一个嵌套多层的数组 array(嵌套可以是任何层数)转换为只有一层的数组。
1.ES6的flat函数实现
function flatten(arr,Infinity){
return arr.flat(Infinity);
}
var arr = [1, [2, [4, [5, [6]]]],[12,'23',[1,2]]];
console.log(flatten(arr,4));
2.使用递归方式
function flatten(arr){
let newArr = []
arr.forEach(element => {
if(Array.isArray(element)){
newArr = newArr.concat(flatten(element))
}else{
newArr.push(element)
}
})
return newArr
}
var arr = [1, [2, [4, [5, [6]]]],[12,'23',[1,2]]]
console.log(flatten(arr))
3.利用reduce函数迭代
function flatten(arr){
let newArr = []
newArr = arr.reduce((pre,cur) => {
return pre.concat( Array.isArray(cur) ? flatten(cur) : cur)
},[])
return newArr
}
var arr = [1, [2, [4, [5, [6]]]],[12,'23',[1,2]]]
console.log(flatten(arr))
4.split和toString共同处理
由于数组会默认带一个toString()的方法,所以可以把数组直接转换成逗号分隔的字符串,
然后再用split()方法把字符串重新转换为数组
但是这种转换方式会有个问题,元素类型会被转换成字符串类型如下面的代码所示。
function flatten(arr){
return arr.toString().split(',')
}
var arr = [1, [2, [4, [5, [6]]]],[12,'23',[1,2]]];
console.log(flatten(arr));// ['1', '2', '4', '5', '6', '12', '23', '1', '2']
5.使用正则
1. 首先是使用 JSON.stringify 配合 正则 将数组转换成字符串
3. 然后再拼接数组括号转为数组对象
function flatten(arr){
let string_arr = JSON.stringify(arr).replace(/\[|\]/g,'');
return JSON.parse('[' + string_arr + ']');
}
var arr = [1, [2, [4, [5, [6]]]],[12,'23',[1,2]]];
console.log(flatten(arr));