我正在创建javascript二维数组
代码是:
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);
输出是:
[undefined,[] left 140 paId“1”top 10
什么是问题任何帮助都应该感激。
答案 0 :(得分:1)
问题在于数组的显示方法。信息存在,但alert
和console.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)
不同)
答案 1 :(得分:0)
你使用键字符串存储值并且错误,因为你将field_arr
声明为数值数组(我认为javascript中没有关联数组这样的东西)。
field_arr[Id] = new Array();
field_arr[Id]['paId']=paId; //this is wrong
您需要创建一个存储在值中的对象,就好像它们与字符串键相关联一样。但从字面上看,它们是对象属性
像这样重新宣布
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
修改强> 但为了符合您当前的代码,您可以使用字符串访问索引,方法是访问它,就像对象的属性一样。 (感谢Tibos)
var field_arr=[];
...
...
field_arr[Id].paId = paId;