从多维数组返回嵌套数组

时间:2015-03-20 15:41:34

标签: javascript

说我有以下2x2阵列:

var aTest = [
    ['test00','test01'],
    ['test10','test11']
]

我可以从第一个(零eth)父数组返回所有嵌套数组。即:aTest [0]返回

['test00', 'test01']

但是,对于没有循环的嵌套数组,我无法做同样的事情。即我想做的:aTest [] [0]:

[['test00'],['test10']]

我错了吗?没有循环就没有办法实现这个目标:

var aTemp = new Array();
for ( var i = 0; i < aTest.length; i++ ) {
    aTemp[i] = new Array();
    aTemp[i][0] = aTest[i][0];
};

2 个答案:

答案 0 :(得分:2)

你是正确的,你必须遍历数组的每个元素才能实现这一目标。

您可以使用map() function of Array prototype优化代码:

&#13;
&#13;
var aTest = [
    ['test00','test01'],
    ['test10','test11']
]

var firstItems = aTest.map(function(item){
   return item[0];
});
&#13;
&#13;
&#13;

答案 1 :(得分:2)

为了扩展Bigood的答案(这是我的想法),你可以创建一个通用的“col”函数,它从多维数组中返回一个列(注意:JavaScript中没有多维数组)这个词的数学意义;它只是包含可以包含其他数组的数组。)

function col(a, n) { return a.map(function(x) { return x[n]; }); }

如果你想变得非常漂亮,你可以将其添加到Array.prototype(注意:有些人非常强烈地认为你不应该修改内置类型。我不是其中之一。):

Object.defineProperty(Array.prototype, 'col', {
    value: function(n) {
        return this.map(function(x) { return x[n]; });
    },
    enumerable: false
});

然后你可以像这样使用它:

aTest.col(0)    // ['test00', 'test10']
aTest.col(1)    // ['test01', 'test11']