2012-01-29 76 views
1

這有效,但似乎令人難以置信的笨拙。有問題的方法是streetsInObj,而obj是可以具有與「streets.all」相對應的鍵「p」,「f」,「t」,「r」的對象。所以我只是試圖返回對象中存在的所有街道。是否有更有效的方法來查找返回對象的子集?

define(['underscore'], function (_) { 
    var streets = { 
    all: [ 
     {abbrev: "p", name: "Preflop"}, 
     {abbrev: "f", name: "Flop"}, 
     {abbrev: "t", name: "Turn"}, 
     {abbrev: "r", name: "River"} 
    ], 
    streetsInObj: function(obj) { 
     self.obj = obj; 
     streets = []; 
     _.map(self.all, function(street, obj) { 
     if(self.obj[street.abbrev]) { 
      streets.push(street); 
     } 
     }); 
     return streets; 
    } 
    }; 
    var self = streets; 
    return self; 
}); 

回答

3

什麼:

return _.filter(self.all, function(s) { 
    return s.abbrev in obj; 
}); 

這應該是罰款,只有4個街道。

all: { 
    p: {abbrev: "p", name: "Preflop"}, 
    f: {abbrev: "f", name: "Flop"}, 
    t: {abbrev: "t", name: "Turn"}, 
    r: {abbrev: "r", name: "River"} 
} 

,然後做:如果你有4000米的街道,和對象很可能有少得多,你很可能通過與街道的目標出發,像獲得一些速度

return _.map(_.keys(obj), function(k) { 
    return self.all[k]; 
}); 
0

在這裏你要返回數組的一個子集(全部)。只是想說明一下,如果你想返回javascript對象的子集屬性,你可以使用_.pick函數。

相關問題