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






