【问题标题】:Accessing an associative array using jQuery使用 jQuery 访问关联数组
【发布时间】:2013-01-24 21:31:08
【问题描述】:

我这里有一个关联数组-

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

我尝试通过各种方法使用 jQuery 访问“userLabels”对象,但失败了。我认为我在基础方面做错了什么。我希望使用 jQuery 访问 userLabels 对象,结果应该是一个数组,所以我可以执行 jQuery.inArray() 操作。

【问题讨论】:

标签: javascript jquery arrays associative-array


【解决方案1】:

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

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 中的对象,具有“长度”属性,虽然我不会在这里详细说明(尽管请随意做一些研究)。我猜这是因为您不知道如何迭代对象属性。当然,如果它对你更有意义,那就去吧。

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

无论如何,我会这样做:

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

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

【讨论】:

  • 警报中缺少右括号,但除此之外,看起来不错。
【解决方案2】:
var basic = dataset.person[0].userLabels;
//          |        |     |
//          |        |     --- first element = target object
//          |        --- person property
//           ---- main-object

【讨论】:

  • 是的,这确实给了我 userLabels 数组。但是当我使用 alert(basic[0]) 来获取 'Name' 时,它不起作用!
  • 后续属性的索引不断增加 - var userLabels = dataset['person'][0]['userLabels']; var tagNames = 数据集['person'][1]['tagNames']; var tableClass = dataset['person'][2]['tableClass']; var colWidths = 数据集['person'][3]['colWidths'];这在整个过程中都很有效。
【解决方案3】:
var userLabels = dataset.person[0].userLabels;
if ($.inArray(yourVal, userLabels) !== -1) {
    doStuff();
}

【讨论】:

  • 是的,这确实给了我 userLabels 数组。但是当我使用 alert(userLabels[0]) 获取“名称”时,它不起作用!
  • 这很奇怪。它应该工作。 alert(userLabels) 能带给你什么?
  • 后续属性的索引不断增加 - var userLabels = dataset['person'][0]['userLabels']; var tagNames = 数据集['person'][1]['tagNames']; var tableClass = dataset['person'][2]['tableClass']; var colWidths = 数据集['person'][3]['colWidths'];这在整个过程中都很有效。
  • 啊,我想我误解了你在找什么。查看@TheWeirdNerd 的回答,了解如何以更简洁的方式重组数据的好建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-11
  • 1970-01-01
  • 1970-01-01
  • 2011-02-01
  • 1970-01-01
相关资源
最近更新 更多