有没有一种更有效的方法来找到对象的返回子集

Is there a more efficient way to find return a subset of an object?

本文关键字:方法 对象 子集 返回 有效 一种 有没有      更新时间:2023-09-26

这很有效,但看起来非常笨拙。有问题的方法是streetsInObj,而obj是一个对象,它可以有对应于streets.all的键"p"、"f"、"t"answers"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]; 
});

这里返回一个数组的子集(all)。只是想注意,如果您想返回javascript对象的子集属性,可以使用_.pick函数。