Javascript - 根据属性值从列表中获取特定对象

时间:2012-11-07 12:33:04

标签: javascript jquery javascript-objects

我有一个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 个答案:

答案 0 :(得分:4)

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

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

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

如果它是一个数组,那么它不会被id键入,所以你需要遍历每个项目并检查id属性,如上所述。

为了能够通过id检查,它必须是:

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

allOrganizationsList["id1"].memberCount;

答案 3 :(得分: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']可以返回一个结果数组。