Pobieranie atrybutów wielopoziomowych za pomocą notacji tablicowej z obiektu JSON
Mam tu problem z psychicznym obciążeniem, gdzie mam pobrany obiekt JSON przy użyciu kolekcji w kręgosłupie. Oto jak wygląda obiekt:
{
"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,
}
To, co chcę zrobić z tymi danymi, to filtrowanie ich na podstawie konkretnego atrybutu, takiego jak atrybuty Venue.Name lub Date (które są różnymi głębokościami obiektu i mogą być głębsze niż dwa poziomy dla niektórych innych danych) . W kolekcji Backbone mam następujący kod, aby filtrować i zwracać nową kolekcję z odpowiednio przefiltrowaną zawartością:
findWhere: function (Attribute, Value)
{
return new Project.Collections.Fixtures(this.filter(function (fixture)
{
return eval('fixture.attributes.' + Attribute) == Value;
}));
}
To pozwala mi określić atrybut, który chcę filtrować, i to, co chcę, aby był równy, dla dowolnej głębokości obiektu. Problem polega na tym, że naprawdę nie chcę używać „eval” do tego celu, ale oczywiście nie mogę użyć „[Atrybut]” dla czegoś takiego jak „AwayTeam.TeamID”, ponieważ nie będzie działać.
Czy ktoś zna metodę, której mogę użyć, aby osiągnąć tę funkcjonalność bez używania eval?