【发布时间】:2017-01-08 15:54:01
【问题描述】:
我正在尝试构建一个函数,该函数将应用于数组并提取其所有非数组值。
对于数组,它将再次执行相同的过程,直到将第一个数组、其子数组、子数组自己的子数组等中的所有值放入单个数组中.
我面临的问题在于,我事先不知道每个数组会有多少个子数组,等等。
我的尝试:
我已经尝试使用 forEach() 如下所示,但正如我上面所说的,子数组的数量和一般的值是事先未知的。我确信某种循环甚至递归会有所帮助,但我无法让它在我的脑海中发挥作用。
function extract (value) {
var
result = [],
isArray = function (value) {
return value.constructor === Array;
}
if (isArray(value)) {
value.forEach(function (each) {
if (!isArray(each)) result.push(each);
else {
each.forEach(function (j) {
if (!isArray(each)) result.push(each);
else... // same as above
});
}
});
}
return result;
}
我相信使用 each = each[i] 就像我在 DOM 中寻找后代会有所帮助,但我不确定如何设置 while 在这种情况下循环以及终止条件应该是什么。
期望的结果:
var array = [["a", 2, [3, "mn"], "bu"], "la", [12, 34, "ab"]]; // Just an example
var result = extract(array); // Outputs: ["a", 2, 3, "mn", "bu", "la", 12, 34, "ab"]
如何修复我当前的代码以达到上述预期结果?
【问题讨论】:
-
我认为这个答案会解决你的问题:stackoverflow.com/a/15030117/693275
-
它使用的是
reduce(),它适用于IE9+。谢谢@RobM。 -
查看其他一些例子(有很多)——其实是同一个问题
标签: javascript arrays