Как можно вернуть свойство объекта (элемент массива) по значению из другого массива? JS
У меня есть 2 массива, один с idшниками, в другом объекты с айдишником и именем которое предназначено для этого айдишника:
const arr1 = [11, 15, 33];
const arr2 = [{id: 11, name: 'name11'}, {id: 15, name: 'name15'}, {id: 33, name: 'name33'}];
Как вернуть массив с именами из arr2, по айдишникам из arr1?
Мой вариант (рабочий):
const result = arr2.filter((el) => arr1.find((id) => id === el.id)).map((el) => el.name);
Возможно это можно сделать с меншим числом итераций, мне кажеться это не очень хороший вариант с точки зрения оптимизации (если будет много елементов в массивах) ?
Ответы (2 шт):
Автор решения: Yugofx
→ Ссылка
Ваш алгоритм хорош, в принципе - O(nm). Можно сделать в O(n + m). Чуть больше памяти в процессе выполнения займет, зато сложность линейная.
const keys = {};
arr1.forEach(key => keys[key] = null);
const result = arr2.reduce((names, obj) => {
if (obj.id in keys) {
names.push(obj.name);
}
return names;
}, []);
Автор решения: Dmitrii Sedov
→ Ссылка
Можно так например:
const arr1 = [11, 15, 33];
const arr2 = [{id: 11, name: 'name11'}, {id: 15, name: 'name15'}, {id: 33, name: 'name33'}];
const result = arr2.flatMap(item => (arr1.includes(item.id) ? [item.name] : []))
console.log(result)