[1, [2, 3, [4, 5]]] ------> [1, 2, 3, 4, 5]
- 使用reduce方法递归实现
function flatten(list){
return list.reduce((list,item)=>{
return list.concat(Array.isArray(item) ? flatten(item): item);
},[])
}
- 使用toString() 和map 方法
[1, [2, 3, [4, 5]]].toString()
=> '1,2,3,4,5'
然后按逗号分隔为数组 => ['1', '2', '3', '4', '5']
再把数组中每项字符串转换为数字
function flatten(list){
return list.toString().split(',').map(item=>Number(item))
}
- join()与map方法
与 toString()方法一样 join也可以把数组转换为一维字符串
function flatten(list){
return list.join().split(',').map(item=>Number(item))
}
- map方法递归
function flatten(arr){
var list = []
arr.map(item=>{
if(Array.isArray(item)){
list = list.concat(flatten(item))
} else {
list.push(item)
}
})
return list
}
- es6的扩展运算符能将二维数组变为一维
[...[1,2,[4]]]
=> [1,2,[4]]
function flatten(arr) {
while(arr.some(item=>Array.isArray(item))) {
arr = [].concat(...arr);
}
return arr;
}
- flat(Infinity)
arr.flat(Infinity)
- 正则
JSON.stringify(arr).replace(/[\[|\]]/g, '').split(',').map(item=>Number(item))
网友评论