Cloud47
@Cloud47
Frontend, javascript, HTML, CSS

Как сравнивать массивы в постоянно увеличивающейся цепочке?

Здравствуйте. Объясните пожалуйста механизм. Допустим есть 2 массива и мы сравниваем, есть ли там хотя бы один общий одинаковый элемент.Если есть - заканчиваем сравнение, в противном случае добавляем новый 3й массив и сравниваем с двумя предыдущими.И так пока не получим массив, в котором есть повторяющийся элемент с одним элементом из прежних массивов.Как это сделать на js?
  • Вопрос задан
  • 72 просмотра
Пригласить эксперта
Ответы на вопрос 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Тут поможет Map! Словарь, где ключами может выступать не обязательно строка, а вообще любой тип данных JS.

Надо будет собирать Map, в который записывать ключом очередной элемент, а значением - id массива, где он встретился. Если при вставке очередного ключа выяснится, что такой уже есть – вот она, пара!

const someObject = {a:'value A'};
const arr1 = [1, 'test', someObject];
const arr2 = [100, 200, 'testing', {a:'value A'}];
const arr3 = [1e3, someObject];
const arrays = [arr1, arr2, arr3];

const dict = new Map();

const addArray = (arr, label) => {
  for(let i=0, len=arr.length; i<len; i++) {
    const key = arr[i];
    if (dict.has(key)) return [key, dict.get(key), label];
    dict.set(key, label);
  }
}

for (let i=0, len = arrays.length; i<len; i++) {
  const check = addArray(arrays[i], `arr${i+1}`);
  if (!check) continue;
  console.log(`Value ${check[0]} found in arrays ${check[1]} and ${check[2]}`);
  break;
}
// Value [object Object] found in arrays arr1 and arr3
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы