Задать вопрос
riddlr
@riddlr

Как проверить, есть ли у массивов общие элементы?

Есть два массива, содержащих значения. Нужно проверить, содержит ли первый массив хотя бы одно значение из второго массива.

Есть ли другой более изящный способ без итерации, создания промежуточного массива и двух проверок?

const userRoles = ['user', 'admin']
const allowedRoles = ['vasya', 'admin']

function roles(...roles) {
    let allowed = roles.map(role => {
      return userRoles.includes(role)
    })
    if (allowed.includes(true)) {
      //
    } else {
      //
    }
}

roles(allowedRoles)
  • Вопрос задан
  • 903 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
arr1.filter(n => arr2.includes(n)).length !== 0

// или

arr1.some(function(n) {
  return this.has(n);
}, new Set(arr2))

// или

new Set([ ...arr1, ...arr2 ]).size < new Set(arr1).size + new Set(arr2).size

UPD. Наконец-то дождались:

!!new Set(arr1).intersection(new Set(arr2)).size
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Karpion
Либо сравнивать каждый элемент первого массива с каждым элементом второго массива.

Либо отсортировать оба массива и сравнивать так:
if a[i] .lt. b[j] then
i++
else if a[i] .gt. b[j] then
j++
else они равны - вот мы и нашли что нужно
Ответ написан
Ваш ответ на вопрос

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

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