我想将一个 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/