@Nikolay37

Как найти одинаковые свойства объектов в массиве?

Есть массив вида:
[{ name: 'Apple',
  length: '5',
  id: '21',
  image: 'a2ff5' 
},{ name: 'Banana',
  length: '6',
  id: '22',
  image: 'e8za2'}]

Таких объектов много, каким образом найти одинаковые id (2 и более) и выписать их в отдельный массив?
  • Вопрос задан
  • 784 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
const duplicates = Array
  .from(arr.reduce((acc, n) => acc.set(n.id, acc.has(n.id)), new Map))
  .reduce((acc, n) => (n[1] && acc.push(n[0]), acc), []);

// или

const duplicates = Object
  .entries(arr.reduce((acc, n) => (acc[n.id] = (acc[n.id] || 0) + 1, acc), {}))
  .filter(n => n[1] > 1)
  .map(n => +n[0]);

// или

const duplicates = [...arr
  .reduce((acc, n) => (acc[+acc[0].has(n.id)].add(n.id), acc), [ new Set, new Set ])
  .pop()
];

// или

const duplicates = arr
  .map(n => n.id)
  .filter((n, i, a) => i !== a.indexOf(n))
  .filter((n, i, a) => i === a.indexOf(n));

// или

const duplicates = arr.reduce((acc, { id: n }, i, a) => (
  !acc.includes(n) && i !== a.findIndex(m => m.id === n) && acc.push(n),
  acc
), []);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
xEpozZ
@xEpozZ
Веб-разработчик
collection = [{ name: 'Apple',
  length: '5',
  id: '21',
  image: 'a2ff5' 
},{ name: 'Banana',
  length: '6',
  id: '22',
  image: 'e8za2'},{ name: 'Banana',
  length: '6',
  id: '22',
  image: 'e8za2'}
  ];
  
ids = [];

newCollection = collection.filter(el => {
  if (ids.includes(el.id)) {
    return true;
  }
  ids.push(el.id);
  
  return false;
})

console.log(newCollection)

https://playcode.io/375357?tabs=script.js,preview,...
Ответ написан
Комментировать
IgorPI
@IgorPI
find о чем нибудь говорит?
Java Script поиск в массиве.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
23 нояб. 2024, в 11:55
5000 руб./за проект
23 нояб. 2024, в 09:59
2000 руб./в час
23 нояб. 2024, в 08:36
2000 руб./за проект