Найти индекс объекта по идентификатору в массиве массивов - PullRequest
0 голосов
/ 02 января 2019

У меня есть множество домов, в которых есть множество комнат.

У каждой комнаты, дома и улицы есть уникальный идентификатор (например, если у комнат в доме 1 есть идентификатор 1..4, у комнат в доме 2 будет идентификатор 5..9)

var street = {
    id = 1,
    streetname = 'stack street',
    houses = [
        {
            id: 1,
            type: 'brick'
            rooms: [
                {
                    id: 1,
                    color: 'blue'
                }, ... a bunch more
            ]
        }, ... a bunch more
    ]
}

Существуют ли простые решения, такие как arr.findIndex () для:
1) Если указан идентификатор комнаты, вернуть индекс дома в массивах и индекс комнаты в массивах этого дома
2)Учитывая номер комнаты, верните дом, в котором он находится
3) Если указан номер комнаты, верните объект комнаты

Ответы [ 2 ]

0 голосов
/ 02 января 2019

1) findIndex() - это простое решение, но вам нужно использовать функцию массива еще раз для сканирования комнат в обратном вызове проверки дома:

var houseIndex = street.houses.findIndex(h => h.rooms.some(r => r.id === roomId));

2) Точно так же с find():

var house = street.houses.find(h => h.rooms.some(r => r.id === roomId));

или, если имеется предыдущий поиск индекса, используйте его результат:

var house = street.houses[houseIndex];

3) Свести иерархию комнат и комнат в простой список и найти нужную комнату:

var room = street.houses.flatMap(h => h.rooms).find(r => r.id === roomId);
0 голосов
/ 02 января 2019

Для номера комнаты 7:

1)

int houseIndex = street.houses.findIndex(house => house.rooms.find(room => room.id == 7));
int roomIndex = street.houses.find(house => house.rooms.find(room => room.id == 7)).rooms.findIndex(room => room.id == 7)

2)

var houseObject = street.houses.find(house => house.rooms.find(room => room.id == 7))  

3)

var roomObject = street.houses.find(house => house.rooms.find(room => room.id == 7)).rooms.find(room => room.id == 7)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...