Проверка аналогичной пары ключей, а затем ее динамическое суммирование с помощью reduce

#javascript #arrays

#javascript #массивы

Вопрос:

Итак, в основном мне нужно сгенерировать диаграмму, у меня есть следующие данные

     [
        {
            "indessx": "1",
            "type": "A",
            "number": "260",
            "month": "May",
            "date": "01/05/20"
        },
        {
            "indessx": "2",
            "type": "A",
            "number": "320",
            "month": "May",
            "date": "02/05/20"
        },
{
            "indessx": "2",
            "type": "A",
            "number": "320",
            "month": "June",
            "date": "02/06/20"
        },
    ]
  

Теперь мне нужно показать график с использованием приведенных выше данных, но ответ, который я получаю, имеет несколько похожих значений месяца, таких как май, в приведенном выше фрагменте.Теперь я использовал reduce для получения суммы чисел за определенный месяц,
итак, как и в мае, будет сгенерирован новый объект с суммированным числом 260 320

таким образом, новый объект массива будет выглядеть следующим образом..

   [
        {
            "indessx": "1",
            "type": "A",
            "number": "580", // value after addition
            "month": "May",
        },        
{
            "indessx": "2",
            "type": "A",
            "number": "320",
            "month": "June",
            "date": "02/06/20"
        },
    ]
  

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

Ответ №1:

Вы можете использовать следующую функцию. В качестве входных данных используйте свои исходные данные, которые вы указали в начале. В качестве выходных данных он возвращает запрошенный вами массив.

 const getNewData = function(data) {
    let indessx = 1, newData = [];
    data.forEach(el => {
        if(newData.findIndex(element => element.month == el.month) != -1) {
            let curElement = newData[newData.findIndex(element => element.month == el.month)];
            curElement.number = (parseInt(curElement.number)   parseInt(el.number)).toString();
            delete curElement.date;
        } else {
            let newEl = el;
            newEl.indessx = indessx;
            newData.push(newEl);
            indessx  ;
        };
    });
    return newData;
};