2012-07-24 81 views
0
family = { 
    'person1':[{"id":"1111","name":"adam", "sex":"male", "born":"USA"}], 
    'person2':[{"id":"2222","name":"sarah", "sex":"female", "born":"Canada"}], 
    'person3':[{"id":"3333","name":"adam", "sex":"male", "born":"USA"}] 
}; 

鉴于上述家族对象,我如何提取其中一个人物对象的所有属性(id,name,sex,born)一个特定的id(或名称)值?比如:id = 1111用javascript/jquery查找大对象内的对象及其属性

所以最好我能得到一个新的对象personInQuestion我可以操纵,其中:

personInQuestion = {"id":"1111","name":"adam", "sex":"male", "born":"USA"} 

回答

4

遍历的对象,抢相匹配的元素。

var search = 1111; 

var personInQuestion = {}; 
for(var x in family){ 
    var item = family[x][0]; 
    if(item.id == search){ 
     personInQuestion = item; 
     break; 
    } 
} 
+0

谢谢,看起来它会很好地工作。干杯 – 2012-07-24 16:40:36

+0

不客气,很高兴我可以帮忙:-D – 2012-07-24 16:40:54

0

我不认为jQuery是这样做的最好的工具,而不是我建议你考虑看看at the Where method that the Backbone library offers。不知道这是否会过度杀伤。

用法是这样的:

var friends = new Backbone.Collection([ 
    {name: "Athos",  job: "Musketeer"}, 
    {name: "Porthos", job: "Musketeer"}, 
    {name: "Aramis",  job: "Musketeer"}, 
    {name: "d'Artagnan", job: "Guard"}, 
]); 

var musketeers = friends.where({job: "Musketeer"}); 

alert(musketeers.length); 
+3

我会说为此集成Backbone可能会过度,因为Backbone更多的是一个框架。使用像[Underscore](http://underscorejs.org/)这样更实用的库可能更合适。 – 2012-07-24 16:12:38

0

的jQuery不会为JSON(JavaScript对象)数据提供了选择,所以你需要遍历对象。例如:

result = null; 
$.each(family, function(i, v) { 
    if (v.id === "1111" && v.name === "adam" ...) { 
    result = v; 
    return; 
    } 
}); 
0

这里的罗布Hruska的的suggestion(在评论)使用Underscore的例子。

family = { 
    'person1':[{"id":"1111","name":"adam", "sex":"male", "born":"USA"}], 
    'person2':[{"id":"2222","name":"sarah", "sex":"female", "born":"Canada"}], 
    'person3':[{"id":"3333","name":"adam", "sex":"male", "born":"USA"}] 
}; 

var searchId = 1111; 

var person = _.find(family, function(item) { return item[0].id == searchId; })[0];