Проверка эквивалентности наборов элементов в массивах

Если повторения должны учитываться, сравните частоты элементов через Map. Одинаковый набор уникальных значений ещё не означает равенства массивов как мультимножеств.

Короткий ответ

Что ответить на собеседовании

Если повторения должны учитываться, сравните частоты элементов через Map. Одинаковый набор уникальных значений ещё не означает равенства массивов как мультимножеств.

Подробный разбор

Ответ с пояснениями

Условие

Реализуйте функцию, которая определяет, совпадают ли элементы двух массивов, игнорируя их порядок.

 //checkSimilarity([0,1,2], [2,1,0]) === true
 //checkSimilarity([0,1], [2,1,0]) === false
 //checkSimilarity([0,5,1], [0,1,5]) === true

checkSimilarity(arrA, arrB)

function checkSimilarity(arrA, arrB) {
    
}

Ответ

Если повторения должны учитываться, сравните частоты элементов через Map. Одинаковый набор уникальных значений ещё не означает равенства массивов как мультимножеств.

function checkSimilarity(a, b) {
  if (a.length !== b.length) return false;
  const counts = new Map();
  for (const value of a) counts.set(value, (counts.get(value) ?? 0) + 1);
  for (const value of b) {
    const count = counts.get(value);
    if (!count) return false;
    if (count === 1) counts.delete(value);
    else counts.set(value, count - 1);
  }
  return counts.size === 0;
}

Исходные массивы не меняются. Map использует SameValueZero: NaN совпадает с NaN, +0 с -0, а объекты сравниваются по ссылке. Ожидаемая сложность O(n) при стандартной хеш-реализации; если нужна структурная эквивалентность объектов, потребуется другой контракт сравнения.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее