2014-09-23 24 views
0

的访问数组中一个特定的值我有这个数组对象:JavaScript的 - 如何对象

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'}}“?

最好的问候,

回答

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; 

NB:Object.keys.filter.indexOf是ES5功能。 Shims适用于较旧的浏览器。

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 
} 
+1

不要使用'对...对数组in'! – Alnitak 2014-09-23 11:18:55

0

如果您正在使用underscore.js,您可以使用_.where(list, properties)功能,它,而不是重新发明的机制。你可以在这里阅读:http://underscorejs.org/#where

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);