Найти элемент в массиве объектов

Вот пример массива. Он может быть большим.

Arr = [{'id':12, 'users':[1, 2, 3, 4]}, {'id':13, 'users':[6, 7, 8, 9]}]

Какой самый оптимальный вариант узнать id, зная, например users = 8 (должен вернуть 13)?


Ответы (2 шт):

Автор решения: Евгений
let arr = [{'id':12, 'users':[1, 2, 3, 4]}, {'id':13, 'users':[6, 7, 8, 9]}];
arr.filter((item)=>{
   return item.users.includes(8)
})

Наверное так

→ Ссылка
Автор решения: witaway

Вам придётся пройтиcь по всем id вручную и для каждого проверить наличие нужного users. Как-то так:

user = 8
Arr.find((x) => x.users.includes(user)).id

Но на самом деле, это будет работать достаточно долго на больших объёмах данных из-за сложности O(N).

Простейшей быстрой альтернативой будет использование Map. Вы можете для каждого user хранить свой id и находить его приблизительно за O(1), потому что Map - хеш-таблица.

Впрочем, при конкретно таком решении вам будет уже намного сложнее изменить id сразу для всех пользователей. Если вам это надо. Если надо, я могу дополнить ответ.

idByUser = new Map()

idByUser.set(1, 12);
idByUser.set(2, 12);
idByUser.set(8, 13);
...

user = 8
console.log(idByUser.get(user));
→ Ссылка