2012-01-29 3 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

무엇에 대해 : 단지 4 거리와 잘되어야

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

.

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 함수를 사용할 수 있다는 점을 주목하고 싶었습니다.

관련 문제