JavaScript二维数组
我正在创建javascript二维数组 代码是:JavaScript二维数组,javascript,arrays,Javascript,Arrays,我正在创建javascript二维数组 代码是: var field_arr=[]; $(".dr").each(function(index){ Id=$(this).attr("id"); alert(dragId); topPos=$("#"+ dragId).position().top; left=$("#"+ dragId).position().left;
var field_arr=[];
$(".dr").each(function(index){
Id=$(this).attr("id");
alert(dragId);
topPos=$("#"+ dragId).position().top;
left=$("#"+ dragId).position().left;
parentDiv=$("#"+dragId).parent().attr("id");
parentDiv= parentDiv.split('-');
paId=parentDiv[1];
field_arr[Id]=new Array();
field_arr[Id]['paId']=paId;
field_arr[Id]['top']=topPos;
field_arr[Id]['left']=left;
});
console.log(field_arr);
输出为:
[未定义,[]剩下140个付费“1”前10名
有什么问题吗?任何帮助都值得感谢。您使用键字符串存储值,这是错误的,因为您将
字段声明为数字数组(我认为javascript中没有关联数组)
您需要创建一个对象来存储值,就像它们与字符串键关联一样。但实际上它们是对象属性
像这样重新申报
field_arr[Id] = {}; //you create an object
field_arr[Id]['paId'] = paId; //create an object property named paId and store a value
field_arr[Id].paId = paId; //you can also access property paId like this
编辑:
但是为了符合当前的代码,您可以使用字符串访问索引,就像访问对象的属性一样
问题在于数组的显示方法。信息在那里,但是警报
和控制台.log
都不会向您显示,因为数组唯一有趣的属性应该是带有数字索引的属性
在JavaScript中,与PHP不同,对象被用作映射/关联数组
首先要检查您的信息是否确实存在:
$(".dr").each(function(index){
var Id=$(this).attr("id");
console.log(Id, field_arr[Id]['paId'], field_arr[Id]['top'], field_arr[Id]['left']);
});
现在,要使显示方法发挥作用,可以采用多种方法,但最好的方法是使用对象:
var field_arr = Object.create(null); // replace with {} if you want to support IE8-
$(".dr").each(function(index){
var id = $(this).attr("id"); // added var to keep variable local
var drag = $("#"+dragId);
field_arr[id] = Object.create(null); // {}
field_arr[id]['paId'] = drag.parent().attr("id").split('-')[1];
field_arr[id]['top'] = drag.position().top;
field_arr[id]['left'] = drag.position().left;
});
console.log(field_arr);
迭代对象的属性非常容易:
for (var id in field_arr) {
console.log(field_arr[id], field_arr[id]['paId'], 'etc');
}
添加一个hasOwnProperty
检查对象是否从null继承(var obj={}
需要它,这与var obj=object.create(null)
不同)对于关联“数组”,javascript的数组仅为数字你应该尽我所能使用对象know@aleation你错了。JS数组是对象,可以用作常规对象。这样做在语义上通常不正确,但也可以。错。所有对象都只有字符串索引,包括数组。数组只是对看起来像数字的字符串索引执行一些特殊操作。var a=[];a.dodge='这样的代码';console.log(a.dodge);
你说得对!那么OP唯一的问题就是他用的是['index']而不是。我想,希望他能读到这个xD@aleationa['index']
完全等同于a.index
。在a.index
起作用的任何情况下,a['index']
也可以。至于Mahan,您创建对象的做法可能是正确的。很少有情况下您需要特定数组的属性。
var field_arr = Object.create(null); // replace with {} if you want to support IE8-
$(".dr").each(function(index){
var id = $(this).attr("id"); // added var to keep variable local
var drag = $("#"+dragId);
field_arr[id] = Object.create(null); // {}
field_arr[id]['paId'] = drag.parent().attr("id").split('-')[1];
field_arr[id]['top'] = drag.position().top;
field_arr[id]['left'] = drag.position().left;
});
console.log(field_arr);
for (var id in field_arr) {
console.log(field_arr[id], field_arr[id]['paId'], 'etc');
}