javascript算法集:数组扁平化

实现方法:Array.prototype.flatten(depth),参数depth表示需要扁平化的层数,返回一个新的数组。

数组扁平化 方法一(递归遍历数组拼接)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function flatten1(ary){
let tem = [],
i = 0,
len = ary.length;
while(i < len){
if(Array.isArray(ary[i])){
// 递归进行上面步骤
// [].concat(...ary),它的参数可以为数组或值,作用为将数组或值连接成新数组。
tem = tem.concat(flatten1(ary[i]))
}else{
tem.push(ary[i]);
}
i++;
}
return tem;
}

PS:可以处理多层数组。

数组扁平化 方法二(reduce结合concat)

1
2
3
4
5
6
7
function flatten2(ary){
return ary.reduce((pre, cur) => {
return pre.concat(Array.isArray(cur) ? flatten2(cur) : cur)
}, [])
}

PS:可以处理多层数组。

数组扁平化 方法三(转化为字符串)

1
2
3
4
5
function flatten2(ary){
return ary.toString().split(',')
}

PS:返回的数组项将为字符串。

数组扁平化 方法四(解构数组)

1
2
3
4
5
6
7
8
9
10
11
12
13
function flatten4(ary){
let tem = []
ary.forEach(item => {
if(Array.isArray(item)){
tem = tem.concat(...item);
}else{
tem = tem.concat(item);
}
})
return tem;
}

PS:只能处理2维数组。
测试:getMaxProfit1([1, 2, 3, [4, 5, 6]]) // [1, 2, 3, 4, 5, 6]

THE END