Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите преобразовать массив (https://javascript.ru/forum/misc/84259-pomogite-preobrazovat-massiv.html)

AlexandrDr 22.07.2022 12:09

Помогите преобразовать массив
 
Имеется массив объектов:
let a = [
{
  agentName: 'Иванов Иван Иванович',
  controlName: 'Петров Петр Петрович',
  flScore: 100
},
{
  agentName: 'Иванов Иван Иванович',
  controlName: 'Сидоров Сидр Сидорович',
  flScore: 95
 },
{
  agentName: 'Викторов Виктор Викторович',
  controlName: 'Тимуров Тимур Тимурович',
  flScore: 195
},
{
  agentName: 'Викторов Виктор Викторович',
  controlName: 'Тимуров Тимур Тимурович',
  flScore: 5
}
]


Из него нужно сделать массив объектов вида:
let result = [
{
  agentName:  'Иванов Иван Иванович',
  data1: {
               controlName: 'Сидоров Сидр Сидорович',
               flScore: 95
             },
  data2: {
              controlName: 'Петров Петр Петрович',
              flScore: 100
             }
},
{
 agentName: 'Викторов Виктор Викторович',
 data1: {
             controlName: 'Тимуров Тимур Тимурович',
             flScore: 195
            },
 data2: {
              controlName: 'Тимуров Тимур Тимурович',
              flScore: 5
            }
}
]

рони 22.07.2022 13:07

AlexandrDr,
<pre id="out"></pre>
    <script>
        let a = [{
                agentName: 'Иванов Иван Иванович',
                controlName: 'Петров Петр Петрович',
                flScore: 100
            },
            {
                agentName: 'Иванов Иван Иванович',
                controlName: 'Сидоров Сидр Сидорович',
                flScore: 95
            },
            {
                agentName: 'Викторов Виктор Викторович',
                controlName: 'Тимуров Тимур Тимурович',
                flScore: 195
            },
            {
                agentName: 'Викторов Виктор Викторович',
                controlName: 'Тимуров Тимур Тимурович',
                flScore: 5
            }
        ]
        let obj = {},
            count = {};
        a = a.reduce((arr, {
            agentName,
            controlName,
            flScore
        }) => {
            let item = obj[agentName];
            if (!item) {
                item = {
                    agentName
                };
                arr.push(item);
                obj[agentName] = item;
                count[agentName] = 0;
            }
            let num = ++count[agentName];
            item[`data${num}`] = {
                controlName,
                flScore
            };
            return arr;
        }, []);
        out.append(JSON.stringify(a, '', 1))
    </script>


Часовой пояс GMT +3, время: 19:00.