这有效,但看起来非常笨拙。所讨论的方法是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;
});
答案 0 :(得分: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];
});
答案 1 :(得分:0)
这里返回一个数组的子集(全部)。只是想要注意,如果你想返回一个javascript对象的子集属性,你可以使用_.pick函数。