2012-01-26 49 views
1

我有關聯數組:如何找到只知道ATTR值對象的每個屬性

[ 
    { 
     "attr_1":"value 1_1", 
     "attr_2":"value 2_1", 
     "attr_3":"value 3_1" 
    }, 
    { 
     "attr_1":"value 2_1", 
     "attr_2":"value 2_2", 
     "attr_3":"value 2_3" 
    }, 
    { 
     "attr_1":"value 1_1", 
     "attr_2":"value 3_2", 
     "attr_3":"value 3_3" 
    } 
] 

,我需要得到充分的對象,通過請求「值1_1」,例如。請求後我想看看對象1和對象3。我想,我需要哈希,但我不知道該怎麼:(

我怎麼能這樣做正確

回答

2

這是Array.filter完美的情況下!

yourArray.filter(function(elem) { 
    // Loop attr_1, attr_2, attr_3 
    for (var i in elem) { 
    if (elem[i] == 'value 1_1') { 
     return true; 
    } 
    } 
}); 

Array.filter在所有瀏覽器中都是原生的,但在IE8及更低版本中不是。 在這種情況下,你必須包含這個填充工具

/** 
* Copyright (c) Mozilla Foundation http://www.mozilla.org/ 
* This code is available under the terms of the MIT License 
*/ 
if (!Array.prototype.filter) { 
    Array.prototype.filter = function(fun /*, thisp*/) { 
     var len = this.length >>> 0; 
     if (typeof fun != "function") { 
      throw new TypeError(); 
     } 

     var res = []; 
     var thisp = arguments[1]; 
     for (var i = 0; i < len; i++) { 
      if (i in this) { 
       var val = this[i]; // in case fun mutates this 
       if (fun.call(thisp, val, i, this)) { 
        res.push(val); 
       } 
      } 
     } 

     return res; 
    }; 
} 

更多信息: http://www.diveintojavascript.com/core-javascript-reference/the-array-object/array-filter

+0

哦謝謝!這是完美的) – rsboarder

+0

嗯,發生了一些奇怪的事情。如果我綁定篩選器,它將返回屬性,但是如果我在控制檯中篩選,它將返回具有此屬性的對象。 – rsboarder

+0

我無法複製您的問題!檢查這個http://jsfiddle.net/UCc4V/它正確地返回匹配的對象。 – Davide

0
function search(arr, value) { 
    var ret = []; 
    for (var i=0, l=arr.length; i<l; i++) { 
     for (var k in arr[i]) { 
      if (arr[i][k] === value) ret.push(arr[i]); 
     } 
    } 
    return ret; 
} 
1

使用underscore

list = [ 
    { 
     "attr_1":"value 1_1", 
     "attr_2":"value 2_1", 
     "attr_3":"value 3_1" 
    }, 
    { 
     "attr_1":"value 2_1", 
     "attr_2":"value 2_2", 
     "attr_3":"value 2_3" 
    }, 
    { 
     "attr_1":"value 1_1", 
     "attr_2":"value 3_2", 
     "attr_3":"value 3_3" 
    } 
] 

query = "value 1_1" 

results = _(list).filter(function(elem) { 
    return _(_(elem).values()).include(query) 
}) 

console.log(results) 

與之相對原始的JavaScript,該實施考慮到所有細微的細節,如自己/非自己的對象的屬性。

相關問題