Группировка объектов с использованием двух массивов в новый массив - PullRequest
0 голосов
/ 17 июня 2020

Мне нужно сгруппировать товары из массива товаров на основе сезона, который указан в массиве заказов . В массиве заказов есть пара "ключ-значение" сезон (например, "сезон": "2015"). Продукты могут быть сопоставлены с отдельным объектом заказа с помощью «id» массива заказов и «orderlineId» массива продуктов.

Когда я сгруппировал продукты по сезонам, их также необходимо сгруппировать. на основе "uniqueId" и "colorCode" , которые находятся внутри product.uniqueId и product.colorCode .

Массив заказов

{
    "id": 99945333,
    "key": "1",
    "orderNumber": "01",
    "season": "2007"
},
{
    "id": 99945335,
    "key": "1",
    "orderNumber": "02",
    "season": "2016"
},
{
    "id": 99945333,
    "key": "2",
    "orderNumber": "03",
    "season": "2019"
},
{
    "id": 99945333,
    "key": "3",
    "orderNumber": "04",
    "season": "2017"
}
]

массив товаров

        "orderlineId": 99945333,
        "product": {
            "season": null,
            "size": "XXL",
            "category: "pants"
            "sizeSortCode": "60",
            "subSize": null,
            "subSizeSortCode": "0",
            "uniqueId": "80457",
            "year": null
        },
        "quantity": 1,
        "quantityDelivered": 0,
        "remark": null
    },
{
        "orderlineId": 99945333,
        "product": {
            "season": null,
            "size": "XXL",
            "category: "pants"
            "sizeSortCode": "60",
            "subSize": null,
            "subSizeSortCode": "0",
            "uniqueId": "80457",
            "year": null
        },
        "quantity": 1,
        "quantityDelivered": 0,
        "remark": null
    },
{
        "orderlineId": 99945335,
        "product": {
            "season": null,
            "size": "XXL",
            "category: "shirt"
            "sizeSortCode": "60",
            "subSize": null,
            "subSizeSortCode": "0",
            "uniqueId": "80457",
            "year": null
        },
        "quantity": 1,
        "quantityDelivered": 0,
        "remark": null
    },
{
        "orderlineId": 99945335,
        "product": {
            "season": null,
            "size": "XXL",
            "category: "trouser"
            "sizeSortCode": "60",
            "subSize": null,
            "subSizeSortCode": "0",
            "uniqueId": "80453",
            "year": null
        },
        "quantity": 1,
        "quantityDelivered": 0,
        "remark": null
    },
{
        "orderlineId": 99945473,
        "product": {
            "season": null,
            "category: "blouse"
            "size": "XXL",
            "sizeSortCode": "60",
            "subSize": null,
            "subSizeSortCode": "0",
            "uniqueId": "80453",
            "year": null
        },
        "quantity": 1,
        "quantityDelivered": 0,
        "remark": null
    },

Я думаю, что здесь лучше всего подойдет новый массив, поэтому Мне легче перебирать их.

желаемый результат: новый массив

      {
        "season": 2007,
        "products": [
           {
            "season": null,
            "size": "XXL",
            "category: "pants"
            "sizeSortCode": "60",
            "subSize": null,
            "subSizeSortCode": "0",
            "uniqueId": "80453",
            "year": null
           }
           { 
            "season": null,
            "size": "XXL",
            "sizeSortCode": "60",
            "subSize": null,
            "subSizeSortCode": "0",
            "uniqueId": "80453",
            "year": null
           }
        },
      {
        "season": 2016,
        "products": [
           {
            "season": null,
            "size": "XXL",
            "sizeSortCode": "60",
            "subSize": null,
            "subSizeSortCode": "0",
            "uniqueId": "80457",
            "year": null
           },
    },
           { 
            "season": null,
            "size": "XXL",
            "sizeSortCode": "60",
            "subSize": null,
            "subSizeSortCode": "0",
            "uniqueId": "80453",
            "year": null
           }
        }
]

Мне это показалось довольно сложным. Я предполагаю, что сначала мне нужно сопоставить сезоны, но не знаю, как сгруппировать продукты и построить новый массив. Помощь очень ценится!

1 Ответ

1 голос
/ 17 июня 2020

А,

Думаю, я нашел достаточный ответ на свой вопрос. Это не совсем соответствует желаемому результату, но я могу с этим работать !. Я использовал:

const sortedSeasons = orders.concat(products).reduce((acc, currentVal) => {
    acc[currentVal.season] = Object.assign(acc[currentVal.id] || {}, currentVal);
    return acc;
}, {});
Object.keys(sortedSeasons).map(i => sortedSeasons[i]);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...