2012-01-29 5 views
1

Это работает, но кажется невероятно неуклюжим. Этот метод - улицыInObj, а obj - объект, который может иметь ключи «p», «f», «t», «r», которые соответствуют street.all. Поэтому я просто пытаюсь вернуть все улицы, которые существуют в объекте.Есть ли более эффективный способ поиска возврата подмножества объекта?

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 улицы. Если у вас было 4000 улиц, а объект, вероятно, имеют гораздо меньше, вы могли бы, вероятно, получить некоторую скорость, начиная с объекта улиц, как:

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

, а затем делать:

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

Здесь вы возвращаете подмножество массива (все). Просто хочу отметить, что если вы хотите вернуть свойства подмножества объекта javascript, вы можете использовать функцию _.pick.

Смежные вопросы