Помогите объединить объекты.
Добрый день.
Что-то я никак не соображу как сделать Есть массив объектов: 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 в связке друг с другом |
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> |
Без всякого вуя
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. |