这行得通,但看起来笨拙。所讨论的方法是streetInObj,而obj是一个对象,可以具有对应于street.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;
});

最佳答案

关于什么:

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];
});

09-16 22:26