Задать вопрос
@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']
]
  • Вопрос задан
  • 942 просмотра
Подписаться 1 Средний Комментировать
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
О каком индексе идёт речь: const index = 0;.

Достаём элементы:

const duplicates = arr.filter((n, i, a) => a.filter(m => m[index] === n[index]).length > 1);

или

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

или

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

или

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

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

Похожие вопросы
OfferCase Москва
от 400 000 ₽
ITK academy Нижний Новгород
от 80 000 до 120 000 ₽
Future Москва
от 50 000 до 70 000 ₽