2011-10-12 125 views
0

我有一個數組,看起來這個樣子的 -使用_.each找到對象數組

 list = [{"doc":{"id": "123", "name":"abc"}}, {"doc":{"id": "345", "name":"xyz"}},{"doc":{"id": "123", "name":"str"}}] 

我如何使用_.each方法使用id =「123」檢索文檔對象?任何幫助是極大的讚賞。

乾杯!

+1

'_.each'是Underscore.js,而不是從jQ​​uery的... – ThiefMaster

回答

5

閱讀jQuery.each如何處理break;

var object_with_id_123; 
$.each(list, function(key, val){ 
    if (val.doc.id == "123") { 
    object_with_id_123 = val; 
    return false; // break; 
    } 

    return true; // continue; - just to satisfy jsLint 
}); 
console.log(object_with_id_123); 
+0

感謝那些幫助:) – verdure

0
var list = [{"doc":{"id": "123", "name":"abc"}}, {"doc":{"id": "345", "name":"xyz"}},{"doc":{"id": "123", "name":"str"}}] 

var olist = []; 
$.each(list,function(key, value){ 
    if(value.doc.id =="123"){ 
     olist.push(value); 
    } 

}) 

    $.each(olist,function(key, value){ 
       alert(JSON.stringify(value)) 


}) 
0

,因爲你有2個結果與編號123我已經添加了陣列結果。如果你有1個結果,你可以返回obj.doc,而不是添加它導致

var result = []; 
$.each(list, function(index, obj) { 
    if(obj.doc.id == 123) { 
     result.push(obj.doc); 
    } 
}); 
15

其實,_.detect會多出一個適當的功能來解決這個問題:

var list = [ 
    {"doc":{"id": "123", "name":"abc"}}, 
    {"doc":{"id": "345", "name":"xyz"}}, 
    {"doc":{"id": "123", "name":"str"}} 
]; 

_.detect(list, function (obj) {return obj.doc.id === "123"}); 

結果:

{"doc":{"id": "123", "name":"abc"}} 

另外,如果你想使用id =「123」返回兩個對象,那麼你合作用_.select替代_.detect。

_.select(list, function (obj) {return obj.doc.id === "123"}); 

結果:

[{"doc":{"id": "123", "name":"abc"}}, {"doc":{"id": "123", "name":"str"}}] 
+0

偉大的答案!完美的工作! – Scotty

+0

OP應該接受這個答案! –

+0

如果你想索引而不是返回的對象怎麼辦? – Strawberry

相關問題