如何创建javascript多维数组?

如何创建javascript多维数组?,javascript,jquery,arrays,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']=4

我想从下面的代码中创建一个多维数组

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

Javascript没有多维数组,它只有数组数组或类似的对象对象数组,等等

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

然而,您真正需要的是一个对象而不是数组,因为数组只能有像
按钮[0][2]
这样的数字索引,而对象可以有像
按钮[0]['left']
或等效符号
按钮[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;

在使用数组的第二个维度之前,应该初始化对象

下面是一个例子:

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

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

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

然后,您可以使用索引访问对象:
按钮[1]。例如,左

您可以执行更简单的操作:

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}]
。但是,我看不到您问题的第一部分与所需格式之间的联系。

我需要$。每个函数中的此格式数组<代码>[rows]=>Array([0]=>Array([column1]=>hello[column2]=>hola[column3]=>bonjour)[1]=>Array([column1]=>再见[column2]=>hasta luego[column3]=>au revoir))
使用附加信息编辑您的问题,而不是将其添加为注释。它现在几乎无法读取。在本例中,它是一个对象数组。另外,因为
数组
对象
按钮[i]=[];按钮[i][‘左’]=100;console.log(按钮[i]['left'];
log
100,不会抛出任何错误。它只是不会增加
按钮的长度,但它会在
中显示,用于循环中。@Matt我很清楚这一点,但我没有提到它,因为这是处理数组的一种不好的方法,因为它违背了数组的最初目的,应该避免-尤其是初学者。您能分享一下多维数组的定义吗?@wared通常,在大多数语言中,
多维数组
一词有一个特定的定义,甚至是它在内存中的表示方式。因此,多维数组不同于
数组
:。