Как найти ID того пользователя, указанного в большенстве объектов?
имеется такой объект, необходимо найти того юзера, кто имеет наибольшее количество групп (в contacts указаны они)
на этом примере я должен найти ID 65
тоесть юзер под id 65 имеет самое большое количество групп

Ответы (1 шт):
Вначале выбрать все массивы с контактами в новый, типа такого:
let arr = test.reduce((acc, item) => { acc.push(item.contacts); return acc; }, [])Затем надо массив сделать плоским https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/flat, получится примерно так:
let arrFlat = arr.flat();Результат будет примерно таким:
[65, 45, 65, 23, 78, 90]Дальше уже можно идти любыми путями, какими вы считаете нужными для подсчёта. Например можно сделать мапу, где ключ - ID, значение - количество вхождений и потом найти максимумЫ из него. Можно сразу цикл и подсчёт.
const occurrences = [65, 45, 65, 23, 78, 90].reduce(function (acc, curr) { return acc[curr] ? ++acc[curr] : acc[curr] = 1, acc }, {}); console.log(occurrences) // => {23: 1, 45: 1, 65: 2, 78: 1, 90: 1} ^-----
Сразу мапу сформировать так:
let occurrences = arr.reduce((acc, curr) => {
curr.contacts.forEach(contact => {
acc[contact ] ? ++acc[contact ] : acc[contact ] = 1
})
return acc;
}, {});
console.log(occurrences) // => {23: 1, 45: 1, 65: 2, 78: 1, 90: 1}
^-----
Строго говоря, можно было сразу делать двойной цикл (первый по VKGroup, второй - внутри по contacts) и сразу находить максимальные вхождения. Но способ выше в п.1.2.3 наверное немного нагляднее.