У меня есть множество домов, в которых есть множество комнат.
Каждая комната, дом и улица имеют уникальный идентификатор (например: если номера в доме 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) Учитывая идентификатор комнаты, вернуть объект комнаты



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Для номера 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)
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);
Начните здесь: stackoverflow.com/questions/8517089/js-search-in-object-valu es или выполните поиск по другим вопросам, чтобы найти индекс массива (объектов) путем поиска содержащихся значений.