@aftar

Как в массиве найти элемент другого массива?

Есть 2 массива
const arr1 = ['яблоко', 'груша', 'апельсин']
const arr2 = ['банан', 'слива', 'груша', 'ананас']


Нужно проверить содержит ли arr1 элемент массива arr2 и вернуть его индекс.
в данном случае должен вернуть индекс 1

Вот как пробовал, но работает не правильно
let result

        arr2.some(r =>  {
            result = arr1.indexOf(r)
            return arr1.indexOf(r)
        })
  • Вопрос задан
  • 454 просмотра
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
Ищем индекс одного (первого встреченного) элемента, присутствующего в обоих массивах:

const index = arr1.findIndex(n => arr2.indexOf(n) !== -1);

Получаем индексы всех таких элементов:

// просто массив индексов
const indices = arr1.reduce((acc, n, i) => (arr2.includes(n) && acc.push(i), acc), []);


// объект вида { элемент: индекс первого вхождения }
const indices = arr2.reduce((acc, n) => (
  acc[0].hasOwnProperty(n) && (acc[1][n] = acc[0][n]),
  acc
), [ arr1.reduce((acc, n, i) => (acc[n] ??= i, acc), {}), {} ])[1];


// Map вида { элемент: массив всех индексов данного элемента }
const indices = arr1.reduce((acc, n, i) => (
  acc[0].has(n) && acc[1].set(n, acc[1].get(n) ?? []).get(n).push(i),
  acc
), [ new Set(arr2), new Map ])[1];
Ответ написан
FeST1VaL
@FeST1VaL
Тихий
Почему не правильно, просто вы не добавили индекс в функцию.

arr2.some((r, index) =>  {
  result = arr1.indexOf(r);
  if(result > -1) return index; // 2
})
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы