Как фильтровать элементы массива на основе свойства внутри двойного вложенного массива - PullRequest
0 голосов
/ 11 апреля 2019

Ну, у меня сложная проблема. по крайней мере, это сложно для меня.

Итак, у меня есть Массив, в котором есть Массив, в котором есть Массив.

и я хочу отфильтровать самый верхний массив на основе свойств самого глубокого массива.

Допустим, у меня есть этот массив объектов

var garages = [{
        "GarageId": 1,
        "GarageName": "Garage_001",
        "Sections": [{
            "SectionId": 1,
            "Name": "Section_002",
            "Cars": [{
                "Id": 5,
                "Model": "Bmw"
            }, {
                "Id": 6,
                "Model": "Mercedes"
            }]
        }, {
            "SectionId": 2,
            "Name": "Section_003",
            "Cars": [{
                "Id": 8,
                "Model": "Toyota"
            }, {
                "Id": 6,
                "Model": "Mercedes"
            }]
        }]

    },
    {
        "GarageId": 6,
        "GarageName": "Garage_006",
        "Sections": [{
            "Id": 1,
            "Name": "Section_007",
            "Cars": [{
                "Id": 5,
                "Model": "Bmw"
            }, {
                "Id": 6,
                "Model": "Mercedes"
            }]
        }, {
            "Id": 2,
            "Name": "Section_003",
            "Cars": [{
                "Id": 8,
                "Model": "Toyota"
            }, {
                "Id": 6,
                "Model": "Mercedes"
            }]
        }]

    }
]

И я хочу получить список гаражей, которые, например, содержат Hyundai. как мне это сделать? Я пытался часами, и это то, что я придумал. это может быть глупый кусок кода, но я только запутался, имея дело с такими вложенными массивами!

Итак, мой код такой:

garages: any[] = [];
selectedCarModel: number: 8;

filterOnCarModel(carId) {
    this.garages = getGaragesFromServed();

    this.selectedCarModel = this.CarModels.find(c => c.Id == id);
    let filteredArray = this.garages
        .filter((garage) =>
            garage.Sections).
        filter((section) =>
            study.Cars.find((car) => car.Id == carId));
    this.garages = filteredArray;
}

Спасибо за понимание

1 Ответ

0 голосов
/ 11 апреля 2019
var filteredGarages = garages.filter(garage => 
    garage.Sections.filter(section => 
         section.Cars.filter(car => car.Model.indexOf("Bmw")>=0)
   .length > 0)
.length > 0)
...