#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;
};