2011-06-21 112 views
3

我不知道如何做到這一點下面給出這個數組JSON對象:搜索JSON對象的數組

var stuff = [ 
    { 
    'Address' : '123 Street', 
    'Name' : 'From' 
    }, 
    { 
    'Address' : '456 Avenue', 
    'Name' : 'To' 
    } 
] 

所以我想什麼,能夠做的就是查詢這個數組對象的基礎在其中一個屬性上,在這種情況下是「名稱」,並返回與查詢匹配的整個對象。

有沒有辦法做到這一點與jQuery或只是常規的JavaScript?

比如我想返回整個對象,其中名稱===「從」

回答

5
function findStuff(jsonobject, propertyToFind, valueToFind) 
{ 
    for (var i = 0; i < jsonobject.length; i++) { 
     if (jsonobject[i][propertyToFind] === valueToFind) 
      return jsonobject[i]; 
    } 
    return null; 
} 
1
for(var i=0; i<stuff.length; i++){ 
    var item = stuff[i]; 
    if(item.Name=='From') 
     .... 
} 
1
function findByName(ary,name){ 
    for (var a = 0; a < ary.length; a++){ 
     if (ary[a].Name == name) 
      return stuff[a]; 
    } 
    return {}; 
} 

var match = findByName(stuff,'From'); 

使用循環經歷的對象。使用.Name關閉對象來讀取JSON對象的屬性值。

1
$.each('stuff', function(key,value) 
{ 
    if (key == 'Name' && value == 'From') 
    { 
     alert('got it!'); 
    } 
}); 
0

,而不是編寫自定義函數,你可以使用這個JS LIB - DefiantJS(defiantjs.com)。它使用「搜索」方法擴展全局對象JSON。使用此方法,您可以使用XPath表達式搜索JSON結構,並且它將返回包含匹配的數組(如果沒有找到匹配項,則爲空數組)。

var stuff = [ 
     { 
      "Address": "123 Street", 
      "Name": "From" 
     }, 
     { 
      "Address": "456 Avenue", 
      "Name": "To" 
     } 
    ], 
    res = JSON.search(stuff, '//*[Name = "From"]'); 

console.log(res[0].Address); 
// 123 Street 

這裏是工作提琴:
http://jsfiddle.net/hbi99/4H57C/