JavaScript二维数组

时间:2014-01-22 08:04:56

标签: javascript arrays

我正在创建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

什么是问题任何帮助都应该感激。

2 个答案:

答案 0 :(得分:1)

问题在于数组的显示方法。信息存在,但alertconsole.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;