数组扁平化(flatten)实现方案
[1,2,3,[1,2,3,[1,2]]] => [1, 2, 3, 1, 2, 3, 1, 2]
上面的转换就是数组的扁平化,将一个嵌套多层的数组 array 转换为只有一层的数组。 下面是实现数组扁平化的几种简单方法。
1. 递归
function flatten1(arr){
let result = [];
for(var i =0;i<arr.length;i++){
if(Array.isArray(arr[i])){
result = result.concat(flatten1(arr[i]));
}else{
result.push(arr[i]);
}
}
return result;
}
flatten1([1,2,3,[1,2,3,[1,2]]])//[1, 2, 3, 1, 2, 3, 1, 2]
2. toString
function flatten2(arr){
arr = arr.join(',').split(',');
arr = arr.map(item=>+item); //将被转成字符串的数字转换回去;
return arr;
}
flatten2([1,2,3,[1,2,3,[1,2]]])//[1, 2, 3, 1, 2, 3, 1, 2]
3. reduce()
function flatten3(arr){
return arr.reduce((prev,next)=>{
return prev.concat(Array.isArray(next)? flatten3(next) : next);
},[])
}
flatten3([1,2,3,[1,2,3,[1,2]]])//[1, 2, 3, 1, 2, 3, 1, 2]
4. concat()
function flatten4(arr) {
return !Array.isArray(arr) ? arr : [].concat.apply([], arr.map(flatten4));
}
flatten4([1,2,3,[1,2,3,[1,2]]])//[1, 2, 3, 1, 2, 3, 1, 2]
5. arr.flat()
//arr.flat() 会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。
//Infinity 无穷大, -Infinity无穷小
function flatten5(arr){
return arr.flat(Infinity);
}
flatten5([1,2,3,[1,2,3,[1,2]]])//[1, 2, 3, 1, 2, 3, 1, 2]
6. JSON
function flatten6(arr){
let str = JSON.stringify(arr);
let str1 = str.replace(/\[|\]/g,'');
let arr1 = str1.split(',');
return arr1.map(item=>+item);//将被转成字符串的数字转换回去;
}
flatten6([1,2,3,[1,2,3,[1,2]]])//[1, 2, 3, 1, 2, 3, 1, 2]
还没有评论,来说两句吧...