0

我有一个 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);

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

4

4 回答 4

4

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

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

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

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

于 2012-11-07T12:39:04.330 回答
2

jQuery.grep(数组,函数(elementOfArray,indexInArray)[,反转])

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

于 2012-11-07T12:52:54.203 回答
0

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

为了让您能够通过 id 进行检查,它必须类似于:

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

allOrganizationsList["id1"].memberCount;
于 2012-11-07T12:36:59.713 回答
0

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

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'] 可以返回结果数组。

于 2012-11-07T12:42:04.170 回答