Javascript 使用jQuery访问关联数组

Javascript 使用jQuery访问关联数组,javascript,jquery,arrays,associative-array,Javascript,Jquery,Arrays,Associative Array,这里有一个关联数组- var dataset = { "person" : [ {"userLabels": ["Name","Role"]}, {"tagNames": ["lName","role"]}, {"tableClass": "width530"}, {"colWidths": ["50%","50%"]} ] } 我尝试使用各种方法使用jQuery访问“userLabels”对象,但失败了。

这里有一个关联数组-

var dataset = {
    "person" : [    
        {"userLabels": ["Name","Role"]},
        {"tagNames": ["lName","role"]},
        {"tableClass": "width530"},
        {"colWidths": ["50%","50%"]}
    ]
}

我尝试使用各种方法使用jQuery访问“userLabels”对象,但失败了。我觉得我的基本功有问题。我希望使用jQuery访问userLabels对象,结果应该是一个数组,这样我就可以执行jQuery.inArray()操作

首先,以下是如何使用现有方法访问数据集

var basic = dataset.person[0].userLabels;
//          |        |     |
//          |        |     --- first element = target object
//          |        --- person property
//           ---- main-object
var dataset = 
{
  "person" : [  
          {"userLabels": ["Name","Role"]},
          {"tagNames": ["lName","role"]},
          {"tableClass": "width530"},
          {"colWidths": ["50%","50%"]}
         ]
};



 alert(dataset['person'][0]['userLabels']);    //style 1

 alert(dataset.person[0]['userLabels']);    //style 2

 alert(dataset.person[0].userLabels);    //style 3

 //Also you can use variables in place of specifying the names as well i.e.

 var propName ='userLabels';
 alert(dataset.person[0][propName]);

 //What follows is how to search if a value is in the array 'userLabels'
 $.inArray('Name', dataset.person[0].userLabels);
我想问你为什么要以一种“有趣的方式”来做这件事。你为什么不把它们都做成物体呢

如果我是你,我会这么做,因为如果你想一想,人是一个对象,应该注意,数组基本上是Javascript中具有“length”属性的对象,尽管我在这里不会详细说明(不过请随意做一些研究)。我猜这是因为您不知道如何迭代对象属性。当然,如果这对你更有意义,那就去做吧

请注意,数组和对象之间的区别之一是需要定义对象属性;您会注意到,我在下面给出了'Name'和'Role'值'undefined'

在任何情况下,我都会这样做:

var dataset = 
{
  "person" : {
          "userLabels": {"Name" : undefined,"Role": undefined},
          "tagNames": {"lName" : undefined,"role" : undefined},
          "tableClass": "width530",
          "colWidths": ["50%","50%"]
        }
};

for (var i in dataset) { //iterate over all the objects in dataset
   console.log(dataset[i]);   //I prefer to use console.log() to write but it's only in firefox
   alert(dataset[i]);    // works in IE.
}

 //By using an object all you need to do is:

 dataset.person.userLabels.hasOwnProperty('Role'); //returns true or false

无论如何,希望这能有所帮助。

首先,这里是使用现有方法访问数据集的方法

var dataset = 
{
  "person" : [  
          {"userLabels": ["Name","Role"]},
          {"tagNames": ["lName","role"]},
          {"tableClass": "width530"},
          {"colWidths": ["50%","50%"]}
         ]
};



 alert(dataset['person'][0]['userLabels']);    //style 1

 alert(dataset.person[0]['userLabels']);    //style 2

 alert(dataset.person[0].userLabels);    //style 3

 //Also you can use variables in place of specifying the names as well i.e.

 var propName ='userLabels';
 alert(dataset.person[0][propName]);

 //What follows is how to search if a value is in the array 'userLabels'
 $.inArray('Name', dataset.person[0].userLabels);
我想问你为什么要以一种“有趣的方式”来做这件事。你为什么不把它们都做成物体呢

如果我是你,我会这么做,因为如果你想一想,人是一个对象,应该注意,数组基本上是Javascript中具有“length”属性的对象,尽管我在这里不会详细说明(不过请随意做一些研究)。我猜这是因为您不知道如何迭代对象属性。当然,如果这对你更有意义,那就去做吧

请注意,数组和对象之间的区别之一是需要定义对象属性;您会注意到,我在下面给出了'Name'和'Role'值'undefined'

在任何情况下,我都会这样做:

var dataset = 
{
  "person" : {
          "userLabels": {"Name" : undefined,"Role": undefined},
          "tagNames": {"lName" : undefined,"role" : undefined},
          "tableClass": "width530",
          "colWidths": ["50%","50%"]
        }
};

for (var i in dataset) { //iterate over all the objects in dataset
   console.log(dataset[i]);   //I prefer to use console.log() to write but it's only in firefox
   alert(dataset[i]);    // works in IE.
}

 //By using an object all you need to do is:

 dataset.person.userLabels.hasOwnProperty('Role'); //returns true or false

无论如何,希望这有帮助。

是的,这确实给了我userLabels数组。但是,当我使用alert(basic[0])获取“Name”时,它不起作用!后续属性的索引不断增加-var userLabels=dataset['person'][0]['userLabels'];var tagNames=dataset['person'][1]['tagNames'];var tableClass=dataset['person'][2]['tableClass'];var colWidths=dataset['person'][3]['colWidths'];这在整个过程中都很有效。是的,这确实给了我userLabels数组。但是,当我使用alert(basic[0])获取“Name”时,它不起作用!后续属性的索引不断增加-var userLabels=dataset['person'][0]['userLabels'];var tagNames=dataset['person'][1]['tagNames'];var tableClass=dataset['person'][2]['tableClass'];var colWidths=dataset['person'][3]['colWidths'];这在整个过程中都很有效。是的,这确实给了我userLabels数组。但是,当我使用alert(userLabels[0])获取“Name”时,它不起作用!真奇怪。它应该会起作用。
alert(userLabels)
给您带来了什么?后续属性的索引不断增加-var userLabels=dataset['person'][0]['userLabels'];var tagNames=dataset['person'][1]['tagNames'];var tableClass=dataset['person'][2]['tableClass'];var colWidths=dataset['person'][3]['colWidths'];这在整个过程中都很有效。啊,我想我误解了你在寻找什么。查看@theweirderd的答案,了解如何以更干净的方式重新构造数据的好建议。是的,这确实给了我userLabels数组。但是,当我使用alert(userLabels[0])获取“Name”时,它不起作用!真奇怪。它应该会起作用。
alert(userLabels)
给您带来了什么?后续属性的索引不断增加-var userLabels=dataset['person'][0]['userLabels'];var tagNames=dataset['person'][1]['tagNames'];var tableClass=dataset['person'][2]['tableClass'];var colWidths=dataset['person'][3]['colWidths'];这在整个过程中都很有效。啊,我想我误解了你在寻找什么。查看@TheWeirderd的答案,可以获得一个关于如何以更干净的方式重新构造数据的好建议。在警报中缺少右括号看起来不错,但在其他方面看起来不错。在警报中缺少右括号,但在其他方面看起来不错。你说的“使用jQuery”是什么意思?jQuery只是一个Javascript库,它对对象没有任何特殊的作用(它的许多方法都接受对象,但这只是正常的JS数据使用)。可能重复您所说的“使用jQuery”是什么意思?jQuery只是一个Javascript库,它对对象不做任何特殊的处理(它的许多方法都接受对象,但这只是正常的JS数据使用)