【问题标题】:Javascript - getting a particular object from list based on property valueJavascript - 根据属性值从列表中获取特定对象
【发布时间】:2012-11-07 12:33:03
【问题描述】:

我有一个 javascript json 结果列表 - self.data.allOrganizationsList

self.data.allOrganizationsList 包含其属性为的组织列表

customentityaccess, id, isLabsAccessAllowed, memberCount, organizationname, organizationwebsite

我想访问一个组织对象,它有 id = 402881702121fec10121520080930001

我试图从下面的语句中得到这个,但由于列表中的每个项目都是一个对象,我无法得到想要的结果。

self.data.allOrganizationsList.id['402881702121fec10121520080930001']`
//(or)
self.data.allOrganizationsList["id"]['402881702121fec10121520080930001']

其他替代方法是使用 $.each(self.data.allOrganizationList, function(index, item))。

但是我可以在不迭代 self.data.allOrganizationList 的情况下实现上述结果

来自 $.grept()

var myvar = $.grep(response.permissionedOrganizations, function(v) {
            return v.id === '40288170227c142201227eb56c5c000a';
        })[0];
console.log(myvar);

在控制台中显示未定义。我是不是错过了什么。

【问题讨论】:

  • 通过列表您指的是具有您列出的那些属性的对象的 javascript 数组
  • self.data.allOrganizationsList = $.parseJSON(java 对象的数组列表);

标签: javascript jquery javascript-objects


【解决方案1】:

使用您的结构,您希望$.grep 过滤掉正确的元素:

var arr = [
  {id: 1, value: 2},
  {id: 3, value: 4}
];

$.grep(arr, function(v) { return v.id === 3; })[0];  // second element

请注意,这确实在幕后进行迭代 - 没有办法通过使用 [key] 表示法来获取正确的元素,因为这不是您的结构的定义方式。

【讨论】:

  • 感谢您的回复!语句中的 [0] 代表 ?
  • @Sangram Anand:$.grep 返回与函数匹配的所有元素的数组。在您的情况下,它始终为 1,因为您使用的是 ID。所以你得到一个元素数组。要获取实际对象,只需获取该(第一个)元素。
  • $.grep() 代码未定义。在帖子中添加代码。
  • @Sangram Anand:您使用的是self.data.allOrganizationsList 还是response.permissionedOrganizations?后者包含什么?在函数中尝试console.log(v),看看记录了什么。
  • 我的错。我正在使用另一个变量 - response.permissionedOrganizations 而不是 self.data.allOrganizationsList。实际上使用 $.each(response.permissionedOrganizations) 我得到了 id,并且我需要在 $.grep 中搜索该 id。它现在工作。非常感谢..:)
【解决方案2】:

jQuery.grep(array, function(elementOfArray, indexInArray) [, invert])

查找数组中满足过滤函数的元素。原始数组不受影响。 check

【讨论】:

    【解决方案3】:

    如果它是一个数组,那么它不是由 id 键控的,因此您需要遍历每个项目并检查 id 属性,如上所述。

    为了让您能够通过 id 进行检查,它必须是这样的:

    var allOrganizationsList =    
        {
            "id1": {
                "memberCount": 1
            },
            "id2": {
                "memberCount": 2
            }
        };
    
    allOrganizationsList["id1"].memberCount;
    

    【讨论】:

      【解决方案4】:

      如果您需要根据值搜索多个对象,您可以简单地迭代列表一次:

      for (var i in list) {
          var id = list[i].id;
          my_table[id] = list[i];  // for unique ids
      }
      

      对于非唯一 ID,将 my_table 设为关联数组:

      if (!my_table[id]) my_table[id] = [list[i]];
      else my_table[id].push(list[i]);
      

      在后一种情况下,my_table['12399123'] 可以返回结果数组。

      【讨论】:

        猜你喜欢
        • 2014-09-03
        • 2019-08-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多