JavaScript - 如何访问对象数组中的特定值

时间:2014-09-23 11:03:53

标签: javascript arrays object

我有这个对象数组:

    var buArray = [{'31': {'1':'VN', '2':'AC'}},
                   {'33': {'1':'VN', '2':'AC'}},
                   {'51': {'1':'VN', '2':'AC', '3':'SR', '5':'WIN'}},
                   {'52': {'1':'VN', '2':'AC', '3':'SR', '4':'JU'}},
                   {'53': {'1':'VN', '2':'AC', '3':'SR', '5':'WIN'}},
                   {'54': {'1':'VN', '2':'AC', '3':'SR', '5':'WIN'}},
                   {'55': {'1':'VN', '2':'AC', '3':'SR', '6':'PP'}}]

如何访问此特定对象(ID为31),例如:“{'31':{'1':'VN','2':'AC'}}”?

最诚挚的问候,

4 个答案:

答案 0 :(得分:1)

您可以使用.filter查找数组中的匹配元素:

function findEntry(a, key) {
    return a.filter(function(e) {
        var k = Object.keys(e);
        return k.length === 1 && k[0] === key;
    });
}

结果仍然是一个数组,但它只包含与谓词匹配的元素。

如果内部对象可能包含多个键,则将return行替换为:

return k.indexOf('31') >= 0;

注意:Object.keys.filter.indexOf是ES5功能。 Shims随时可用于旧浏览器。

答案 1 :(得分:0)

在标准的javascript中,你必须遍历每个项目并检查密钥。

function find_object_with_key(arr, key) {
    for(var i = 0;i < arr.length;i++) {   // For each index in the array
        var item = arr[i];                // Retrieve the item
        for(k in item) {                  // For each key in the object
            if(!item.hasOwnProperty(k)) { // Check if the item is a proper member of the object
                continue;
            }
            if(k == key) {                // Check if the key matches what we are searching for
                return item;              // Return the item
            }
        }
    }
    return false;                         // In case of failure return false
}

答案 2 :(得分:0)

如果您使用的是underscore.js,则可以使用它具有的_.where(list, properties)函数,而不是重新发明该机制。您可以在此处阅读:http://underscorejs.org/#where

答案 3 :(得分:0)

这是一个非常令人困惑的数据结构。目前没有任何对象具有id属性,因此您无法对其进行查找 - 编写具有属性的对象为31,33,51的方式你必须编写一个自定义函数来搜索任何对象。

如果可以,我建议将数组中的每个对象重新设置为

{
    id: 31,
    data: {
        '1':'VN',
        '2':'AC'
    }
}

但如果没有,用写的数据,就像下面这样的函数(使用简单的迭代,有更有效的方法)

function findObj(objID, array){
    var i, j, len1, len2;
    for(i = 0, len1 = array.length; i < len1; i++){
        var keys = Object.keys(array[i]);
        for(j = 0, len2 = keys.length; j < len2; j++){
            if(keys[j] === objID) {
                return array[i];
            }
        }
    }
    // object hasn't been found
    return null;
}

然后调用它

findObj("31", buArray);