Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите собрать объект (https://javascript.ru/forum/misc/83859-pomogite-sobrat-obekt.html)

AlexandrDr 06.04.2022 14:21

Помогите собрать объект
 
Пожалуйста помогите из массива объектов

let arr = [
    {category: 'Жалоба', status: 'Ожидание', fio: 'Иванов Иван Иванович', total: 3},
    {category: 'Жалоба', status: 'Закрыт', fio: 'Иванов Иван Иванович', total: 23},
    {category: 'Благодарность', status: 'Ожидание', fio: 'Иванов Иван Иванович', total: 5},
    {category: 'Благодарность', status: 'Принята', fio: 'Иванов Иван Иванович', total: 7},
    {category: 'Жалоба', status: 'Ожидание', fio: 'Сидоров Сидр Сидорович', total: 2},
    {category: 'Жалоба', status: 'Принята', fio: 'Сидоров Сидр Сидорович', total: 9}
]


сделать массив объектов
let result = [
    {fio: 'Иванов Иван Иванович', Жалоба: {Ожидание: 3, Закрыт: 23}, Благодарность: {Ожидание: 5, Принята: 7}},
    {fio: 'Сидоров Сидр Сидорович', Жалоба: {Ожидание: 2, Принята: 9}}
]

рони 06.04.2022 15:21

AlexandrDr,
<pre>
  <script>
let arr = [
    {category: 'Жалоба', status: 'Ожидание', fio: 'Иванов Иван Иванович', total: 3},
    {category: 'Жалоба', status: 'Закрыт', fio: 'Иванов Иван Иванович', total: 23},
    {category: 'Благодарность', status: 'Ожидание', fio: 'Иванов Иван Иванович', total: 5},
    {category: 'Благодарность', status: 'Принята', fio: 'Иванов Иван Иванович', total: 7},
    {category: 'Жалоба', status: 'Ожидание', fio: 'Сидоров Сидр Сидорович', total: 2},
    {category: 'Жалоба', status: 'Принята', fio: 'Сидоров Сидр Сидорович', total: 9}
]
function createObj(arr)
{
   return Object.values(arr.reduce((obj, {category, status, fio, total}) => {
   if(!obj[fio]) obj[fio] = {fio};
   if(!obj[fio][category]) obj[fio][category] = {}
   if(!obj[fio][category][status]) obj[fio][category][status] = 0;
   obj[fio][category][status] += total;
   return obj;
   }, {}))
}
let obj = createObj(arr)
document.write(JSON.stringify(obj, "", 1))

</script>
</pre>


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