【发布时间】:2015-07-11 12:43:09
【问题描述】:
谁能告诉我以下问题的迭代解决方案?我以递归方式解决了它,但在迭代解决方案中遇到了困难。 (Facebook 技术面试题)
Input: [1, {a: 2}, [3], [[4, 5], 6], 7]
Output: [1, {a: 2}, 3, 4, 5, 6, 7]
解决方案必须适用于第 n 个嵌套数组元素(即,如果有人修改了上面示例中的数组值/位置,它必须仍然有效)
递归解:
var flatten = function(input) {
var result = [];
input.forEach(function(element) {
result = result.concat(Array.isArray(element) ? flatten(element) : element);
});
return result;
}
【问题讨论】:
-
出于好奇,您的递归解决方案是什么?
-
这是作业吗?您为迭代解决方案尝试了什么?如果您已经有了递归解决方案,为什么还要追求迭代解决方案?
-
请将递归解决方案添加到您可以正确格式化的问题中。多行代码在 cmets 中不可读。
-
只是出于好奇,输入
[1, {a: [2, [3, 4]]}]会发生什么?输出是否应该与输入或[1, {a: [2, 3, 4]}](或其他)相同?换句话说,展平过程应该到达对象内部还是只是展平本身就是数组的元素?
标签: javascript arrays function