我想从以下代码创建一个多维数组。
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 :(得分: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 }]
。但是,我没有看到问题的第一部分与所需格式之间的联系。