2011-06-21 79 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/