這是群里一個(gè)朋友發(fā)的暂论,好像是他去阿里的面試題。我捉摸了一把拌禾,用靜態(tài)語言寫確實(shí)不太友好取胎。所以用JS寫了一把,實(shí)現(xiàn)了效果湃窍,但是個(gè)人其實(shí)不喜歡遞歸闻蛀,因?yàn)榭傆X得會(huì)棧溢出摄杂。
先放一個(gè)遞歸寫法:
/**
* [[1], [3, 2, 'a'], ['x', 'y', 5]]
* @param arr
*/
function parseArrayLevels(arr) {
let result = []
let f = (deep, e) => {
if (result.length <= deep) {
result.push([])
}
if (Array.isArray(e)) {
e.forEach(a => {
f(deep + 1, a)
})
} else {
result[deep].push(e)
}
}
arr.forEach(e => f(0, e))
return result
}
console.log(parseArrayLevels([1, [3, ["x", "y"], 2] , [[5], "a"]]));
至于非遞歸,應(yīng)該要借助另一個(gè)集合循榆,空間復(fù)雜度高一些析恢。