我在这里遇到了一个让人头痛的问题,我使用Backbone中的集合(retrieved using a collection)获取了一个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”来做到这一点,但显然像“AwayTeam.TeamID”这样的东西我不能使用“[Attribute]”,因为它不起作用。
是否有人知道我可以使用哪种方法来实现此功能而不使用eval?