创建并循环遍历JavaScript中不从零开始的多维数组?

时间:2015-01-23 03:28:31

标签: javascript

我尝试创建一个二维数组,其中包含像这样的对象:

Array[5][1] = Objekt //start from 5 & 1 instead of 0 & 0 
Array[6][1] = Objekt    
Array[7][1] = Objekt    
Array[9][1] = Objekt //skipped 8   
Array[10][1] = Objekt 

Array[2][2] = Objekt  
Array[3][2] = Objekt  
Array[4][2] = Objekt  
Array[6][2] = Objekt //skipped 5
Array[7][2] = Objekt

Array[3][3] = Objekt
Array[4][3] = Objekt
Array[5][3] = Objekt
Array[6][3] = Objekt
Array[8][3] = Objekt //skipped 7

我的问题是:我不能从零开始,所以我不能使用推送功能。这是因为它是一个网格。第一个索引是X,第二个是网格立方体的Y位置。 (three.js所)

那是对象:

var grid =
[   
    //line 1
    {x:5,z:1},
    {x:6,z:1},
    {x:7,z:1},
    {x:9,z:1},
    {x:10,z:1},

    //line 2
    {x:2,z:2},
    {x:3,z:2},
    {x:4,z:2},
    {x:6,z:2},
    {x:7,z:2},

    //line 3
    {x:3,z:3},
    {x:4,z:3},
    {x:5,z:3},
    {x:6,z:3},
    {x:8,z:3},

    //..
};

但是如何创建一个类似于顶部示例的数组而不是像arr [0] [0],arr [0] [1],arr [0] [2],arr [1] [0]这样的数组,arr [1] [1],..?它甚至可能吗?

1 个答案:

答案 0 :(得分:2)

由于您的对象包含您希望将它们放置在数组中的信息,因此您可以通过简单的循环实现此目的:

var newArray = [];

grid.forEach(function(obj) {
    if (!newArray[obj.x]) {
        newArray[obj.x] = [];
    }
    newArray[obj.x][obj.z] = obj;
});

迭代所有对象也很容易。 forEach跳过漏洞:

newArray.forEach(function(innerArray) {
    innerArray.forEach(function(obj) {
        console.log(obj);
    });
});