Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите объединить объекты. (https://javascript.ru/forum/misc/83638-pomogite-obedinit-obekty.html)

AlexandrDr 01.02.2022 15:39

Помогите объединить объекты.
 
Добрый день.

Что-то я никак не соображу как сделать

Есть массив объектов:
let arr = [
{
    "ASSIGNEE": "Иванова Татьяна",
    "SUBCATEGORY": "Обратная связь",
    "AVERAGE_TTL": 279
  },
  {
    "ASSIGNEE": "Иванова Татьяна",
    "SUBCATEGORY": "Обратная связь от КК",
    "AVERAGE_TTL": 4
  },
  {
    "ASSIGNEE": "Петрова Валентина",
    "SUBCATEGORY": "Обратная связь",
    "AVERAGE_TTL": 4
  },
  {
    "ASSIGNEE": "Петрова Валентина",
    "SUBCATEGORY": "Обратная связь от КК",
    "AVERAGE_TTL": 114
  },
]


Мне необходимо из них получить массив такого вида:
let arr2 = [
{
    "ASSIGNEE": "Иванова Татьяна",
    "Обратная связь": 279,
    "Обратная связь от КК": 4
  },
  {
    "ASSIGNEE": "Петрова Валентина",
    "Обратная связь": 4,
    "Обратная связь от КК": 114
  }
]

Т.е по имени человека объединить и вывести поля SUBCATEGORY и AVERAGE_TTL в связке друг с другом

рони 01.02.2022 16:12

AlexandrDr,
<!DOCTYPE html>
<html>
<head>
    <title>Untitled</title>
    <meta charset="utf-8">
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
    <div id="app">
        <ul>
            <li v-for="el of array_out">
                {{el}}
            </li>
        </ul>
    </div>
    <script>
        const webstore = new Vue({
            el: '#app',
            data() {
                return {
                    array_in: [{
                            "ASSIGNEE": "Иванова Татьяна",
                            "SUBCATEGORY": "Обратная связь",
                            "AVERAGE_TTL": 279
                        },
                        {
                            "ASSIGNEE": "Иванова Татьяна",
                            "SUBCATEGORY": "Обратная связь от КК",
                            "AVERAGE_TTL": 4
                        },
                        {
                            "ASSIGNEE": "Петрова Валентина",
                            "SUBCATEGORY": "Обратная связь",
                            "AVERAGE_TTL": 4
                        },
                        {
                            "ASSIGNEE": "Петрова Валентина",
                            "SUBCATEGORY": "Обратная связь от КК",
                            "AVERAGE_TTL": 114
                        },
                    ],
                    array_out: []
                }
            },
            created() {
                this.array_out = this.getArray(this.array_in);
                
            },
            methods: {
                getArray(arr) {
                    let obj_name = {};
                    let arr_calculated = [];
                    arr.forEach(({
                        ASSIGNEE,
                        SUBCATEGORY,
                        AVERAGE_TTL
                    }) => {
                        if (obj_name[ASSIGNEE]) {
                            obj_name[ASSIGNEE][SUBCATEGORY] = AVERAGE_TTL
                        } else {
                            obj_name[ASSIGNEE] = {
                                ASSIGNEE,
                                [SUBCATEGORY]: AVERAGE_TTL
                            }
                            arr_calculated.push(obj_name[ASSIGNEE])
                        }
                    })
                    return arr_calculated;
                }
            },
        });
    </script>
</body>
</html>

voraa 01.02.2022 16:15

Без всякого вуя
let arr = [
{
    "ASSIGNEE": "Иванова Татьяна",
    "SUBCATEGORY": "Обратная связь",
    "AVERAGE_TTL": 279
  },
  {
    "ASSIGNEE": "Иванова Татьяна",
    "SUBCATEGORY": "Обратная связь от КК",
    "AVERAGE_TTL": 4
  },
  {
    "ASSIGNEE": "Петрова Валентина",
    "SUBCATEGORY": "Обратная связь",
    "AVERAGE_TTL": 4
  },
  {
    "ASSIGNEE": "Петрова Валентина",
    "SUBCATEGORY": "Обратная связь от КК",
    "AVERAGE_TTL": 114
  },
]

const m = new Map()
arr.forEach(o => {
	const ass = o.ASSIGNEE;
	if (!m.has(ass) ) m.set (ass, {"ASSIGNEE": ass})
	const mo = m.get(ass)
	mo[o.SUBCATEGORY] = o.AVERAGE_TTL
})

let arr2 = [...m.values()]

console.log (arr2)


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