use*_*121 5 javascript recursion
我试图在保留顺序的同时展平嵌套数组,例如[[1, 2], 3, [4, [[5]]]]应该转换为[1, 2, 3, 4, 5].
我正在尝试使用递归来执行此操作,但下面的代码不起作用,我不明白为什么.我知道还有其他方法可以做到这一点,但我想知道这有什么问题.
function flatten (arr) {
var newArr = [];
for (var i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
flatten(arr);
} else {
newArr.push(arr[i]);
}
}
return newArr;
}
flatten([[1, 2], 3, [4, [[5]]]]);
Run Code Online (Sandbox Code Playgroud)
谢谢
Ore*_*enD 12
在flatten递归调用时,您需要传递arr[i]给它,然后使用newArr连接结果.所以替换这一行:
flatten(arr);
Run Code Online (Sandbox Code Playgroud)
有:
newArr = newArr.concat(flatten(arr[i]));
Run Code Online (Sandbox Code Playgroud)
小智 5
这是我经常用于展平嵌套数组的常见模式,由于其函数式编程性质,我发现它更加干净:
var flatten = (arrayOfArrays) =>
arrayOfArrays.reduce((flattened, item) =>
flattened.concat(Array.isArray(item) ? flatten(item) : [item]), []);
Run Code Online (Sandbox Code Playgroud)
或者对于那些喜欢更短、可读性较差的代码高尔夫版本的人来说:
var flatten=a=>a.reduce((f,i)=>f.concat(Array.isArray(i)?flatten(i):[i]),[]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6298 次 |
| 最近记录: |