【发布时间】:2015-02-02 21:13:10
【问题描述】:
也许这是个愚蠢的问题,但我无法意识到是否可以在没有递归的情况下展平多维数组?
我有一个用递归编写的解决方案:
function transform (arr) {
var result = [];
arr.forEach(flatten)
function flatten (el) {
if (Array.isArray(el)) {
return el.forEach(flatten);
}
return result.push(el);
}
return result;
}
要展平的数组示例:
[1, {a: [2, 3]}, 4, [5, [6]], [[7], 8, 9], 10]
和执行:
var a = [1, {a: [2, 3]}, 4, [5, [6]], [[7], 8, 9], 10];
var r = transform(r);
console.log(r); // [1, {a: [2, 3]}, 4, 5, 6, 7, 8, 9, 10]
谢谢!
【问题讨论】:
-
为什么不想使用递归?
-
@JoeEnos 更多的是关于自我教育和好奇心。
-
只有数组很容易,但包括不确定的对象
-
@juvian 有多容易?使用
[].concat.apply([], arr);不会解决多个嵌套的问题:/ -
var a = [1, 4, [5, [6]], [[[5],[6],[[7]]], 8, 9], 10];console.log(a.toString().split(','))
标签: javascript arrays flatten