Как сделать следующую трансформацию данных в 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, } ] }, ] } ] Подскажите пожалуйста, как сделать данное преобразование? |
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> |
Большое спасибо.
|
Часовой пояс GMT +3, время: 19:30. |