2013-12-09 106 views
1

我想从下面的代码创建一个多维数组。如何创建JavaScript多维数组?

var i = 0; 
$('.button_image').each(function() { 
    buttons[i]['left'] = $(this).position().left; 
    buttons[i]['top'] = $(this).position().top; 
    i++; 
}); 

阵列应该是这样的

buttons[1]['left']=10; 
button[1][top]=20; 
buttons[2]['left']=40; 
button[2][top]=50; 

但它给Firefox的控制台上下面的错误。

TypeError: buttons[i] is undefined 
buttons[i]['left']=$(this).position().left; 

请告诉我我的代码有什么问题。提前致谢。

我想这种格式:

[rows] => Array ( 
     [0] => Array ( 
       [column1] => hello 
       [column2] => hola 
       [column3] => bonjour) 
     [1] => Array ( 
       [column1] => goodbye 
       [column2] => hasta luego 
       [column3] => au revoir)) 
+0

我想要$ .each函数中的这个格式数组。 '[行] =>数组 ( [0] =>数组 ( [列1] =>你好 [列2] => HOLA [栏3] =>的Bonjour ) [1] =>数组 ( [列1] =>再见 [列2] =>闪现luego [栏3] =>再见 ) )' –

+0

修改您的与附加信息,而不是将其作为注释问题。它现在几乎不可读。 –

回答

3

JavaScript有没有多维数组,它只有数组的数组或对象同样的对象,等

所以,到另一个阵列中创建一个数组,您需要首先将初始数组本身的元素i定义为数组。您只需在each循环内添加初始化buttons[i] = [];即可。

但是,你真正需要的是什么,是一个对象,而不是一个数组,因为数组只能有数字索引像buttons[0][2],并且对象可以有任意指数像​​或等值的符号buttons[0].left就像你在你的问题中写道。

// this is making buttons[i] a new object: 
buttons[i] = {}; // the preferred notation over "new Object();" 

// now this works without problem: 
buttons[i]['left'] = $(this).position().left; 
buttons[i]['top'] = $(this).position().top; 

// equivalent notation: 
buttons[i].left = $(this).position().left; 
+0

在这个例子中,它是一个对象数组。 – MattDiamant

+0

另外,因为'Arrays'是'Objects',''buttons [i] = [];按钮[i] ['left'] = 100; console.log(按钮[i] ['left'];'将'log' 100,并且不会抛出任何错误,它不会增加'buttons.length',但它会显示在'for中。 ..在循环中 – MattDiamant

+0

@Matt我非常清楚这一点,但是我没有提及它,因为它是一种使用数组的不好的方式,因为它破坏了数组的初始目的,应该避免 - 尤其是初学者 – Christoph

0

您应该在使用数组的第二维之前初始化对象。

下面是一个例子:

var myArr = new Array(); 
myArr[0] = new Array(); 
myArr[0][0] = 'Hello'; 
myArr[0][1] = 'World!'; 
alert(myArr[0][0] + ' ' + myArr[0][1]); 
0

只需推新对象到一个数组。

var buttons = []; 
$('.button_image').each(function() { 
    buttons.push({ 
    left: $(this).position().left, 
    top: $(this).position().top 
    }); 
}); 

然后,您可以使用索引访问对象:例如buttons[1].left

0

你可以这样做简单得多:

var buttons = $('.button_image').map(function() { 
    return $(this).position(); 
}).get(); 

也就是说,这里是如何解决你的代码:

var i = 0, buttons = []; // init "buttons" as an array 
$('.button_image').each(function() { 
    buttons[i] = {}; // init "buttons[i]" as an object 
    buttons[i]['left'] = $(this).position().left; 
    buttons[i]['top'] = $(this).position().top; 
    i++; 
}); 

您可能已经猜到了,它实际上不是一个多维数组,我宁愿称之为“对象数组”:[{ left: 10, top: 20 }, { left: 40, top: 50 }]。但是,我没有看到问题的第一部分与所需格式之间的关系。