如何创建javascript多维数组?

时间:2013-12-09 11:55:09

标签: javascript jquery arrays

我想从以下代码创建一个多维数组。

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 ) )

4 个答案:

答案 0 :(得分:3)

Javascript没有多维数组,只有数组数组或对象等对象等。

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

然而,你真正需要的是一个对象而不是一个数组,因为数组只能有像buttons[0][2]这样的数字索引,对象可以有像{{1}这样的任意索引或者你在问题中写的等效符号buttons[0]['left']

buttons[0].left

答案 1 :(得分:0)

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

以下是一个例子:

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

答案 2 :(得分:0)

只需将新对象推入数组即可。

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

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

答案 3 :(得分: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 }]。但是,我没有看到问题的第一部分与所需格式之间的联系。