ここで精神的に負担のかかる問題が発生しました。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属性(オブジェクトの深さが異なり、他のデータの場合は2レベルより深くなる可能性がある)などの特定の属性に基づいてフィルター処理することです。 。バックボーンコレクション内に次のコードがあり、コンテンツを適切にフィルタリングして新しいコレクションをフィルタリングして返します。
findWhere: function (Attribute, Value)
{
return new Project.Collections.Fixtures(this.filter(function (fixture)
{
return eval('fixture.attributes.' + Attribute) == Value;
}));
}
これにより、オブジェクトの任意の深さに対して、フィルタリングする属性と、それに等しくする属性を属性で指定できます。問題は、これを行うために「eval」を使用したくないということですが、「AwayTeam.TeamID」のようなものには機能しないため、明らかに「[Attribute]」を使用できません。
evalを使用せずにこの機能を実現するために使用できる方法を知っている人はいますか?