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

Как проверить на уникальность многомерные массивы?

Добрый день, как проверить эти два массива на уникальные вложенные массивы что бы получить результат как указано в примере ниже.
let a = [
   [1],
   [2],
   [3],
   [4],
   [5],
]

 let b = [
   [1],
   [4],
   [5],
]

let result = [
  [2],
  [3],
]
  • Вопрос задан
  • 174 просмотра
Подписаться 1 Простой 5 комментариев
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Фронтенд-разработчик
    10 месяцев
    Далее
  • Skillfactory
    Профессия Веб-разработчик
    12 месяцев
    Далее
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Делаем просто, ровно то, что спрошено:

const result = arr1.filter(function(n) {
  return !this.has(n[0]);
}, new Set(arr2.map(n => n[0])));

Делаем сложно, решаем задачу в более общем виде:

function diff(data1, data2, compare = (a, b) => a === b) {
  const arr = Array.isArray(data2) ? data2 : [...data2];
  const result = [];

  for (const n of data1) {
    if (!arr.some(m => compare(m, n))) {
      result.push(n);
    }
  }

  return result;
}

const result = diff(
  arr1,
  arr2,
  (a, b) => a.length === b.length && a.every((n, i) => Object.is(n, b[i]))
);

или

const diff = function*(data1, data2, keys = n => n) {
  const tree = new Map;

  for (const n of data2) []
    .concat(keys(n))
    .reduce((p, c) => p.set(c, p.get(c) ?? new Map).get(c), tree)
    .set(this, true);

  for (const n of data1) {
    if (![].concat(keys(n)).reduce((p, c) => p?.get(c), tree)?.get(this)) {
      yield n;
    }
  }
}.bind(Symbol());

const result = [...diff(arr1, arr2)];
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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