Как найти ID того пользователя, указанного в большенстве объектов?

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

на этом примере я должен найти ID 65

тоесть юзер под id 65 имеет самое большое количество групп введите сюда описание изображения


Ответы (1 шт):

Автор решения: Алексей Шиманский
  1. Вначале выбрать все массивы с контактами в новый, типа такого:

     let arr = test.reduce((acc, item) => {
         acc.push(item.contacts);
         return acc;
     }, [])
    
  2. Затем надо массив сделать плоским https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/flat, получится примерно так:

     let arrFlat = arr.flat();
    

    Результат будет примерно таким:

    [65, 45, 65, 23, 78, 90]
    
  3. Дальше уже можно идти любыми путями, какими вы считаете нужными для подсчёта. Например можно сделать мапу, где ключ - 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 наверное немного нагляднее.


→ Ссылка