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

Как узнать, есть ли в массивах одинаковые значения?

Есть два массива:

arr1 = [20,50]
arr2 = [50, 100]

Как можно их сравнить и получить true, если хотя бы один элемент совпадает с одним элементом другого массива?
  • Вопрос задан
  • 133 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
Делаем просто, ровно то, что спрошено в вопросе:

arr1.filter(n => arr2.includes(n)).length !== 0

// или

arr1.some(Set.prototype.has.bind(new Set(arr2)))

// или

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

Делаем сложно, решаем задачу в более общем виде - сделаем функцию, которая будет находить пересечения среди значений, выдаваемых двумя итераторами, причём под равенством значений может подразумеваться не непосредственное их равенство, а равенство некоторых производных значений:

function intersection(data1, data2, key = n => n) {
  const getKey = key instanceof Function ? key : n => n[key];
  const keys = new Set(Array.from(data2, getKey));
  const result = [];

  for (const n of data1) {
    if (keys.has(getKey(n))) {
      result.push(n);
    }
  }

  return result;
}


// как применять в вашем случае
!!intersection(arr1, arr2).length

// другие примеры использования
intersection(Array(5).keys(), Array(3).keys()) // [0, 1, 2]
intersection('abcDe', 'cd', n => n.toLowerCase()) // ['c', 'D']
intersection([{id: 1}, {id: 2}, {id: 3}], [{id: 2}, {id: 4}], 'id') // [{id: 2}]
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
const isOverlap = (arr1, arr2) => arr1.some((el) => arr2.includes(el));
console.log(isOverlap([20, 50], [50, 100]));
// true
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@ufii
метод some для массивов
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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