Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Как сделать следующую трансформацию данных в javascript? (https://javascript.ru/forum/dom-window/82319-kak-sdelat-sleduyushhuyu-transformaciyu-dannykh-v-javascript.html)

dc65k 19.04.2021 13:25

Как сделать следующую трансформацию данных в javascript?
 
Всем привет.
Есть исходный массив:
const orders = [
    {
        "date": "2017-10-16 12:07:07",
        "docTypesName": "Приход",
        "docId": 564564867361367,
        "image": "https://www.komus.ru/medias/sys_master/root/hd3/h93/9286922043422.jpg",
        "name": "Молочный Изюм 100",
        "price": 102,
        "quantity": 45,
        "removed": 0
    },
    {
        "date": "2017-10-16 12:07:07",
        "docTypesName": "Приход",
        "docId": 564564867361367,
        "image": "https://mariupolcena.com/files/products/9ff44136e6ccb0afb404ad26f727e67d.jpeg",
        "name": "Русская картошка чедар 50",
        "price": 46.3,
        "quantity": 45,
        "removed": 0
    },

    {
        "date": "2017-10-16 12:07:07",
        "docTypesName": "Расход",
        "docId": 564564867361367,
        "image": "https://mariupolcena.com/files/products/9ff44136e6ccb0afb404ad26f727e67d.jpeg",
        "name": "Русская картошка чедар 50",
        "price": 46.3,
        "quantity": 45,
        "removed": 0
    },

    {
        "date": "2017-11-29 17:26:57",
        "docTypesName": "Расход",
        "docId": 564564867361365,
        "image": "https://www.komus.ru/medias/sys_master/root/hd3/h93/9286922043422.jpg",
        "name": "Молочный Изюм 100",
        "price": 102,
        "quantity": 6,
        "removed": 0
    },
]

Структура, которую нужно получить:
export const orders = [
    {
        date: '2017-10-16',
        documents: [
            {
                date: "2017-10-16 12:07:07",
                docId: 564564867361367,
                docTypesName: 'Приход',
                products: [
                    {
                        "image": "https://www.komus.ru/medias/sys_master/root/hd3/h93/9286922043422.jpg",
                        "name": "Молочный Изюм 100",
                        "price": 102,
                        "quantity": 45,
                    },
                    {
                        "image": "https://mariupolcena.com/files/products/9ff44136e6ccb0afb404ad26f727e67d.jpeg",
                        "name": "Русская картошка чедар 50",
                        "price": 46.3,
                        "quantity": 45,
                    }
                ]
            },
            {
                date: "2017-10-16 12:07:07",
                docId: 564564867361367,
                docTypesName: 'Расход',
                products: [
                    {
                        "image": "https://mariupolcena.com/files/products/9ff44136e6ccb0afb404ad26f727e67d.jpeg",
                        "name": "Русская картошка чедар 50",
                        "price": 46.3,
                        "quantity": 45,
                    }
                ]
            }
        ]
    },
    {
        date: '2017-11-29',
        documents: [
            {
                date: "2017-11-29 17:26:57",
                docId: 564564867361365,
                docTypesName: 'Расход',
                products: [
                    {
                        "image": "https://www.komus.ru/medias/sys_master/root/hd3/h93/9286922043422.jpg",
                        "name": "Молочный Изюм 100",
                        "price": 102,
                        "quantity": 6,
                    }
                ]
            },
        ]
    }
]

Подскажите пожалуйста, как сделать данное преобразование?

рони 19.04.2021 15:06

dc65k,
<script>
const orders = [
    {
        "date": "2017-10-16 12:07:07",
        "docTypesName": "Приход",
        "docId": 564564867361367,
        "image": "https://www.komus.ru/medias/sys_master/root/hd3/h93/9286922043422.jpg",
        "name": "Молочный Изюм 100",
        "price": 102,
        "quantity": 45,
        "removed": 0
    },
    {
        "date": "2017-10-16 12:07:07",
        "docTypesName": "Приход",
        "docId": 564564867361367,
        "image": "https://mariupolcena.com/files/products/9ff44136e6ccb0afb404ad26f727e67d.jpeg",
        "name": "Русская картошка чедар 50",
        "price": 46.3,
        "quantity": 45,
        "removed": 0
    },

    {
        "date": "2017-10-16 12:07:07",
        "docTypesName": "Расход",
        "docId": 564564867361367,
        "image": "https://mariupolcena.com/files/products/9ff44136e6ccb0afb404ad26f727e67d.jpeg",
        "name": "Русская картошка чедар 50",
        "price": 46.3,
        "quantity": 45,
        "removed": 0
    },

    {
        "date": "2017-11-29 17:26:57",
        "docTypesName": "Расход",
        "docId": 564564867361365,
        "image": "https://www.komus.ru/medias/sys_master/root/hd3/h93/9286922043422.jpg",
        "name": "Молочный Изюм 100",
        "price": 102,
        "quantity": 6,
        "removed": 0
    },
]
const f = a => a.reduce((a, b) => {
    let {date} = b ;
    date = date.split(/\s+/)[0];
    if (!a[date]) a.accumulator.push({date, documents: a[date] = []});
    let {date : c, docTypesName, docId} = b;
    if (!a[date][[c, docTypesName, docId]]) a[date].push({'date' : c, docTypesName, docId,products : a[date][[c , docTypesName, docId]] = []});
    let {image, name, price, quantity} = b;
    a[date][[c, docTypesName, docId]].push({image, name, price, quantity})
    return a;
}, {accumulator: []}).accumulator;

let a = f(orders);

document.write(`<pre>${JSON.stringify(a, "", 1)}</pre>`)
    </script>

dc65k 19.04.2021 15:29

Большое спасибо.


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