2012-01-29 13 views
1

これは動作しますが、信じられないほど不器用なようです。問題のメソッドはstreetsInObjであり、objはstreets.allに対応するキー "p"、 "f"、 "t"、 "r"を持つことができるオブジェクトです。だから私はオブジェクトに存在するすべての通りを返そうとしているだけです。唯一の4通りで問題ないはずオブジェクトのサブセットを返すより効率的な方法がありますか?

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

:何について

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

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

ここでは、配列(all)のサブセットを返します。ちょうどあなたが_.pick関数を使用することができますjavascriptオブジェクトのサブセットのプロパティを返す場合は、メモしたいと思った。

関連する問題