@atachrus

Как найти значение, встречающееся во всех вложенных массивах?

Как найти значение, которое повторяется в каждом вложенном массиве? В данном случае, как правильно найти 13357? Вложенность у массива всегда одинаковая, но количество записей постоянно меняются. Пробую разными вариантами перебора массива, но может есть вариант проще?

[
    ["13317", "13357"],
    ["13356", "13359", "13357"],
    ["13357", "13311", "13312"]
]
  • Вопрос задан
  • 101 просмотр
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
const values = arr.length
  ? arr[0].filter(n => arr.every(m => m.includes(n)))
  : [];

или

const values = (arr[0] || []).filter(function(n) {
  return this.every(m => m.has(n));
}, arr.map(n => new Set(n)));

или

const values = Array
  .from(arr
    .flatMap(n => [...new Set(n)])
    .reduce((acc, n) => acc.set(n, (acc.get(n) || 0) + 1), new Map))
  .reduce((acc, n) => ((n[1] === arr.length) && acc.push(n[0]), acc), []);

или

const values = Array
  .from(arr.reduce((acc, n) => (
    n.forEach(m => acc.set(m, acc.get(m) || new Set).get(m).add(n)),
    acc
  ), new Map))
  .reduce((acc, n) => (n[1].size === arr.length && acc.push(n[0]), acc), []);

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

const values = [...arr.reduce((acc, n) => (
  n = new Set(n),
  acc.intersection?.(n) ?? n
), [])];
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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