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;

我正在创建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);
输出为:

[未定义,[]剩下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@aleation
a['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');
}