如何获取数组及其子数组中的所有值

12 浏览
0 Comments

如何获取数组及其子数组中的所有值

我正在尝试构建一个函数,该函数将应用于一个数组,并提取所有不是数组的值。

对于那些是数组的值,它将再次执行相同的过程,直到将第一个数组、其子数组、子数组的子数组等所有值放入一个单独的数组中。

我面临的问题是,我事先不知道每个数组将有多少个子数组等等。

我尝试过使用下面所示的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... // 与上面相同
                });
            }
        });
    }
    return result;
}

我相信使用each = each[i]就像我在DOM中寻找子元素一样会有帮助,但我不确定如何设置这种情况下的while循环及终止条件应该是什么。

期望的结果:

var array = [["a", 2, [3, "mn"], "bu"], "la", [12, 34, "ab"]]; // 仅为示例
var result = extract(array); // 输出:["a", 2, 3, "mn", "bu", "la", 12, 34, "ab"]

如何修复我当前的代码以实现上述期望的结果?

0
0 Comments

问题的原因是作者想要从一个包含子数组的数组中获取所有的值,但不知道如何实现。解决方法是使用递归reduce函数。

作者给出了一个解决方法的代码示例,使用了一个名为flatten的函数。该函数接受一个数组作为参数,并使用reduce函数对数组进行迭代。在每次迭代中,reduce函数将当前元素与累加器进行拼接。如果当前元素是一个数组,则递归调用flatten函数来获取其所有值,并将其拼接到累加器中。最后,flatten函数返回拼接后的数组。

在代码示例中,作者定义了一个包含子数组的数组arr。然后,调用flatten函数来获取arr中的所有值,并将结果存储在变量result中。最后,使用console.log打印出结果。

读者在评论中提到了reduce函数的兼容性问题,作者回复称reduce函数适用于IE9+。评论者表示感谢,并表示这个解决方法可能对将来的某些人有帮助。

0
0 Comments

问题的原因:从一个数组及其子数组中获取所有的值。

解决方法:使用递归来实现。定义一个函数extract,接受两个参数array和newarray。如果newarray不存在,则将其初始化为空数组。遍历array,如果当前元素的类型是数组,则递归调用extract函数,将当前元素作为新的array参数传入。否则,将当前元素添加到newarray中。最后,返回newarray。

在给定的示例中,定义了一个数组array。调用extract函数,并将array作为参数传入。将返回的结果赋值给newarray。最后,打印newarray的值。

运行结果为:["a", 2, 3, "mn", "bu", "la", 12, 34, "ab"]。

0