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