1 数组扁平化,我尝试写了一下,但是return的结果不对,我将console.log放在最顶端,打印的结果第一次却是对的,为什么?这个递归哪里出了问题?
function steamroller(arr) {
// I'm a steamroller, baby
var newArr = [];
console.log("steam"+arr) //这里为什么第一次结果是对的?
for (var i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
//console.log(arr[i])
steamroller(arr[i]);
} else {
newArr = newArr.concat(arr[i]);
}
}
//console.log(newArr)
return newArr
}
steamroller([1, [2], [3, [[4]]]]);
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
写递归一定要搞明白,什么情况下进入递归调用,什么情况下结束递归调用,以及递归调用返回的什么,返回的值要怎么用。
你在递归调用有返回值(扁平化的数组),但没处理返回值(本来应该加到 newArr中去),主要应该就是这个问题。
你在Array.isArray为true的分支里没有重新给newArr赋值, 所以结果不对
[1, [2], [3, [[4]]]].toString()本来就是"1,2,3,4"第一输出
steam1,2,3,4是因为([1, [2], [3, [[4]]]]).toString()本来就是1,2,3,4使用reduce代码可以更简单
es6:
es5:
var newArr = [];放外面