如何创建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通常,在大多数语言中,多维数组
一词有一个特定的定义,甚至是它在内存中的表示方式。因此,多维数组不同于数组
:。