Найти индекс объекта по id в массиве массивов

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

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

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

S.. 02.01.2019 06:45
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
1 202
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Для номера 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);

Другие вопросы по теме