@hifProg

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

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

const arr = [
  ['77', 'привет', 'текст']
  ['257', 'привет5', 'текст2']
  ['77', 'привет4', 'текст2']
  ['87', 'привет1', 'текст1']
  ['77', 'привет2', 'текст2']
]

Его нужно отфильтровать по первым значениям [0] у массивов и оставить повторяющие:

const arr = [
  ['77', 'привет', 'текст']
  ['77', 'привет4', 'текст2']
  ['77', 'привет2', 'текст2']
]
  • Вопрос задан
  • 879 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
const duplicates = arr.filter((n, i, a) => a.filter(m => m[0] === n[0]).length > 1);

или

const duplicates = Object
  .values(arr.reduce((acc, n) => ((acc[n[0]] ??= []).push(n), acc), {}))
  .flatMap(n => n.length > 1 ? n : []);

или

const duplicates = Array
  .from(arr
    .reduce((acc, n) => (acc.get(n[0]).push(n), acc), new Map(arr.map(n => [ n[0], [] ])))
    .values())
  .reduce((acc, n) => (n.length > 1 && acc.push(...n), acc), []);

или

const duplicates = arr.filter(function(n) {
  return this.get(n[0]);
}, arr.reduce((acc, [ n ]) => acc.set(n, acc.has(n)), new Map));
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Kozack
@Kozack Куратор тега JavaScript
Thinking about a11y
Комментировать
@rPman
Чтобы найти повторяющиеся значения, необходимо собрать их список, создаете объект, в ключи которого записываете ваши [0].
Затем своим простым циклом собираете новый массив, в который добавляете все значения, присутствующие в этом индекс-объекте.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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