javascript - 展平 N 维 JavaScript 数组

标签 javascript jquery arrays

我想将一个 N 维数组展平为一个数组。该数组仅包含数字,但每个元素本身不一定是数组。样本数据: (md=多维​​)fiddle

 var mdArray = [1,2,[3, 4], [[[5, 6, 7]]]];


 Array.prototype.flattenAll = function () {
         var self = this,
         //finds elements that are not arrays
             numbers = $.grep(self, function (n, i) {
                 return !$.isArray(n);
             }),
         //gets md arrays
             nestedArrays = $.grep(self, function (n, i) {
                 return $.isArray(n);
             }),
             returnArray = [];
         nestedArrays = $.map(nestedArrays, function (a, ix) {
             return a.flatten();
         });
         return returnArray.concat(numbers).concat(nestedArrays);
     };
     Array.prototype.flatten = function () {
             return this.reduce(function (a, b) {
                 return a.concat(b);
             });
     }

展平函数适用于简单的数组数组,但不适用于等级 > 1 的数组。这似乎是一个简单的递归修复方法,但我没有看到它。我在这里缺少什么来让展平运行,直到没有更多的数组可以展平?

最佳答案

一个非常简单的循环就可以解决这个问题:

Array.prototype.flattenAll = function () {
    var flattened = this.slice();
    for (var i=0; i<flattened.length; )
        if ($.isArray(flattened[i]))
            flattened.splice.apply(flattened, [i, 1].concat(flattened[i]));
        else
            i++;
    return flattened;
}

关于javascript - 展平 N 维 JavaScript 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22023760/

相关文章:

javascript - 我如何将 aws secret manager 与 nodejs lambda 一起使用

javascript - 如何知道是否加载了 div 背景图像

Javascript正则表达式匹配至少一个以数字开头的单词跨多个单词但至少有两个单词

javascript - 如何在警报时禁用 Esc 按钮事件?

javascript - 范围 slider 开始和结束处的圆圈

javascript - 在页面加载时运行 ResponsiveVoice 语音

c - 将整个数组作为参数传递给函数

java - 线程 "main"java.lang.StringIndexOutOfBoundsException : String index out of range: 4 中的异常

javascript - 了解克罗克福德的 walk_the_dom ("The Good Parts")

JavaScript 不会从特定数组列表中随机选择名称