我正在尝试构建一个函数,该函数将应用于一个数组,并提取所有不是数组的值。对于那些是数组的值,它会再次执行同样的过程,直到来自第一个数组、其子数组、子数组自己的子数组等的所有值都被放入单个数组中。我面临的问题在于,我不会事先知道每个数组将有多少子数组等等。我尝试使用 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;
}
我认为像在 DOM 中查找后代一样使用each = each[i]
会有所帮助,但我不确定如何设置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"]
如何修改我的当前代码以实现以上所需的结果?
reduce()
,适用于IE9+。不过还是谢谢@RobM。 - Angel Politis