我在这里遇到了一个令人费解的问题,我使用 Backbone 中的集合检索了一个 JSON 对象。这是对象的样子:
{
"MatchID": "00000001",
"Date": "1970-01-01T00:00:00.000Z",
"OriginalID": "",
"Stage": {
"StageNumber": "0",
"StageType": "Stage Type"
},
"Round": {
"RoundNumber": "0",
"Name": "Round Name"
},
"Leg": "1",
"HomeTeam": {
"TeamID": "0",
"Name": "Home Team Name"
},
"AwayTeam": {
"TeamID": "0",
"Name": "Away Team Name"
},
"Venue": {
"VenueID": "0",
"Name": "Venu Name"
},
"Referee": null,
}
我想对这些数据做些什么,是根据特定属性过滤它,例如 Venue.Name 或 Date 属性(它们是对象的不同深度,对于其他一些数据,可能比两个级别更深) . 我在 Backbone 集合中有以下代码来过滤并返回一个新集合,其中的内容经过适当过滤:
findWhere: function (Attribute, Value)
{
return new Project.Collections.Fixtures(this.filter(function (fixture)
{
return eval('fixture.attributes.' + Attribute) == Value;
}));
}
这允许我在一个属性中指定我想要过滤的属性,以及我希望它等于什么,对于任何深度的对象。问题是,我真的不想使用“eval”来执行此操作,但显然我不能将“[Attribute]”用于“AwayTeam.TeamID”之类的东西,因为它不起作用。
有谁知道我可以在不使用 eval 的情况下实现此功能的方法?