题解 | #数组扁平化#
数组扁平化
http://www.nowcoder.com/practice/5d7e0cf4634344c98e6ae4eaa2336bed
1. 使用es6提供的新方法
不知道为啥测试过不了,本地测试能行
function _flatten1(arr) {
return arr.flat(Infinity)
}
2. 使用for循环
let result = []
function _flatten2(arr) {
for (let i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
_flatten2(arr[i])
} else {
result.push(arr[i])
}
}
return result
}
3. 使用while
function _flatten3(arr) {
// some只要还有项是数组类型,就展开一层
while (arr.some((item) => Array.isArray(item))) {
arr = [].concat(...arr)
}
return arr
}
4. 使用reduce方法
function _flatten4(arr) {
return arr.reduce((pre, cur) => {
return pre.concat(Array.isArray(cur) ? _flatten4(cur) : cur)
}, [])
}
5. 只有数字类型
题目说数组只包含数字类型,就可以使用toString、join方法(但是又不知道为何测试用例过不了,本地能行)
function _flatten5(arr) {
// 转成字符串再已逗号为分隔符组合成数组,每一项都要再还原为数字类型
return arr.toString().split(',').map(item=>+item)
}
6. 利用正则替换
function _flatten6(arr) {
let str = JSON.stringify(arr)
let res = str.replace(/(\[|\])/g, '')
return JSON.parse('['+res+']')
}