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?

questionAnswers(4)

yourAnswerToTheQuestion