Ошибка при попытке реализовать метод редуктора, преобразующий массив объектов - PullRequest
0 голосов
/ 07 мая 2020

надеюсь, что у вас все хорошо в этом карантине, я уже полтора часа пытаюсь найти свою проблему в этом коде, я хочу, чтобы вы помогли мне в этом упражнении, у меня есть этот массив,

[
  {
    id: "5eb2d53443ba03249056a126",
    creationDate: "2020-05-05",
    percentage: "3.62%",
    quantity: 21,
    requestType: "1-Cash Advance",
    timePercentage: "0:23:27",
    totalCalls: 580,
    totalTime: "8:21;00"
  },
  {
    id: "5eb2d53443ba03249056a127",
    creationDate: "2020-05-05",
    percentage: "57.41%",
    quantity: 333,
    requestType: "2-Info Request",
    timePercentage: "0:47:18",
    totalCalls: 580,
    totalTime: "262:49;00"
  },
    {
    id: "5eb2d53443ba03249056a126",
    creationDate: "2020-05-06",
    percentage: "3.62%",
    quantity: 21,
    requestType: "1-Cash Advance",
    timePercentage: "0:23:27",
    totalCalls: 580,
    totalTime: "8:21;00"
  },
  {
    id: "5eb2d53443ba03249056a127",
    creationDate: "2020-05-06",
    percentage: "57.41%",
    quantity: 333,
    requestType: "2-Info Request",
    timePercentage: "0:47:18",
    totalCalls: 580,
    totalTime: "262:49;00"
  }
]

это моя реализация сокращения,

результат - предыдущий массив объектов,

    result = Object.values(
        result.reduce((object, {creationDate,
            requestType, quantity,
            totalTime, timePercentage,
            percentage, totalCalls
        }) => {

            if(!object[requestType]) object[requestType] = {
                requestType, quantity, totalTime,
                timePercentage, percentage, totalCalls
            };

            if(object[requestType].requestType === requestType){
                object[requestType].quantity += quantity;
                if(object[requestType].creationDate !== creationDate) object[requestType].totalCalls += totalCalls;
            }
            return object;
        })
    )

то, что я ожидал, это

[
    {
        percentage: "3.62%",
        quantity: 42,
        requestType: "1-Cash Advance",
        timePercentage: "0:46:54",
        totalCalls: 1160,
        totalTime: "16:42;00"
    },
    {
        percentage: "57.41%",
        quantity: 666,
        requestType: "2-Info Request",
        timePercentage: "01:33:48",
        totalCalls: 1160,
        totalTime: "525:38:00"
    }
]

Пожалуйста, не делайте этого заботиться о причудливой части я просто хочу как общую идею, я надеюсь, что смогу решить это самостоятельно, но я не люблю застревать, поэтому я буду продолжать искать решение, ожидая, что кто-то поможет мне с моей проблемой .

Спасибо!

1 Ответ

1 голос
/ 07 мая 2020

нужно добавить начальное значение. проверьте документацию

initialValue Необязательно

Значение, которое будет использоваться в качестве первого аргумента для первого вызова обратного вызова. Если начальное значение не указано, первый элемент в массиве будет использоваться в качестве начального значения аккумулятора и пропущен как текущее значение.

вот рабочий код

let result = [{
        id: "5eb2d53443ba03249056a126",
        creationDate: "2020-05-05",
        percentage: "3.62%",
        quantity: 21,
        requestType: "1-Cash Advance",
        timePercentage: "0:23:27",
        totalCalls: 580,
        totalTime: "8:21;00"
    },
    {
        id: "5eb2d53443ba03249056a127",
        creationDate: "2020-05-05",
        percentage: "57.41%",
        quantity: 333,
        requestType: "2-Info Request",
        timePercentage: "0:47:18",
        totalCalls: 580,
        totalTime: "262:49;00"
    },
    {
        id: "5eb2d53443ba03249056a126",
        creationDate: "2020-05-06",
        percentage: "3.62%",
        quantity: 21,
        requestType: "1-Cash Advance",
        timePercentage: "0:23:27",
        totalCalls: 580,
        totalTime: "8:21;00"
    },
    {
        id: "5eb2d53443ba03249056a127",
        creationDate: "2020-05-06",
        percentage: "57.41%",
        quantity: 333,
        requestType: "2-Info Request",
        timePercentage: "0:47:18",
        totalCalls: 580,
        totalTime: "262:49;00"
    }
];

let aggregatedObject = [];

result = Object.values(result.reduce((aggregatedObject, {
    creationDate,
    requestType,
    quantity,
    totalTime,
    timePercentage,
    percentage,
    totalCalls
}) => {

    if (!aggregatedObject[requestType]) {
        aggregatedObject[requestType] = {
            requestType,
            quantity,
            totalTime,
            timePercentage,
            percentage,
            totalCalls
        };
    }

    if (aggregatedObject[requestType].requestType === requestType) {
        aggregatedObject[requestType].quantity += quantity;
        if (aggregatedObject[requestType].creationDate !== creationDate) {
            aggregatedObject[requestType].totalCalls += totalCalls;
        }
    }
    return aggregatedObject;
}, aggregatedObject));

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