S003-数组扁平化★
// 源数组:[1, [2, [3, [4, 5]]]]
// 降维后数组:[1, 2, 3, 4, 5]
1.数组遍历 + 递归
function flutten(arr) {
let res = [];
arr.map(item => {
if(Array.isArray(item)) {
res = res.concat(flutten(item))
} else {
res.push(item)
}
})
return res;
}
2.join + split + map (适用于里面都是数字的)
function flutten(arr) {
arr.join(',').split(',').map(item => {
return Number(item)
})
}
3.toSting + split + map (适用于里面都是数字的)
function flutten(arr) {
arr.toString().split(',').map(item => {
return Number(item)
})
}
4.扩展运算符
function flutten(arr) {
while(arr.some(item => Array.isArray(item))) {
arr = [].concat(...arr)
}
return arr
}
5.reduce
function flutten(arr) {
return arr.reduce((result,item) => {
return result.concat(Array.isArray(item)?flutten(item):item)
},[])
}
6.正则
let result = JSON.parse('[' + JSON.stringify(arr).replace(/\[|\]/g,'') + ']')
7.使用flat
let result = arr.flat(Infinity)
这里我们详细说一下es6 新增的方法flat
es6提供的新方法flat(depth) let a = [1,[2,3]]; a.flat(); // [1,2,3] a.flat(1); //[1,2,3] flat(depth) 方法中的参数depth,代表展开嵌套数组的深度,默认是1
所以我们可以添加参数1,或者直接调用flat()来对2维数组进行扁平化,如果我们可以提前知道数组的维度,对这个数组进行扁平化处理,参数depth的值就是数组的维度减一。
let a = [1,[2,3,[4,[5]]]]; a.flat(4-1); // [1,2,3,4,5] a是4维数组 其实还有一种更简单的办法,无需知道数组的维度,直接将目标数组变成1维数组。depth的值设置为Infinity。
let a = [1,[2,3,[4,[5]]]]; a.flat(Infinity); // [1,2,3,4,5] a是4维数组
另有github每日更新精选面试题欢迎star
github.com/qdleader/qd…