@ince

Как найти дубликаты по номеру элемента в массиве?

Есть массив. Требуется найти дублирующиеся значения по подмассивам по второму элементу (там где в моем примере числа)
[
   ['a', 123, 'test'],
   ['a', 100, 'test'],
   ['rrr', 123, 'tt'],
   ['rrr', 9, 'tt'],
   ['b', 9, 'a'],
]

на выходе: [123, 9]

Как это сделать коротко и красиво?
Не поможет ли lodash?
  • Вопрос задан
  • 86 просмотров
Решения вопроса 3
0xD34F
@0xD34F Куратор тега JavaScript
const getDuplicatedValues = (arr, key) => Array
  .from(arr.reduce((acc, { [key]: n }) => acc.set(n, 1 + (acc.get(n) || 0)), new Map))
  .filter(n => n[1] > 1)
  .map(n => n[0]);
Ответ написан
@LJ322
function f(arr, n) { // Массив arr, по индексу n
  let result = [];
  let new_arr = [];
  for (let i = 0; i < arr.length; i++) {
    if (new_arr.includes(arr[i][n])) result.push(arr[i][n]);
    new_arr.push(arr[i][n]);
  }
  return result;
}
Ответ написан
@Absolute138
Как это сделать коротко и красиво?
Машинокод хотите?)) Вариант LJ322 хотя бы читаемый.
let a = [
   ['a', 123, 'test'],
   ['a', 100, 'test'],
   ['rrr', 123, 'tt'],
   ['rrr', 9, 'tt'],
   ['b', 9, 'a'],
  [1,123,8]
];

let getDuplicates =(arr,i)=>{
  let temp = {};
  return [...new Set(arr.map(v=>v[i]).filter(v=>(v in temp ? !0 : !(temp[v]=1))))];
}
console.log(getDuplicates(a,1))
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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