souhaite obtenir le total de num pour chacun des mois répétés et laisser la valeur des mois uniques telle qu'elle est dans ce tableau d'objets
[
{num: 11000, month: "September"},
{num: 8000, month: "August"},
{num: 5000, month: "jan"},
{num: 6000, month: "feb"}
]
Résultat attendu
[
{num: 5000, month: "September"},
{num: 6000, month: "September"},
{num: 4500, month: "August"},
{num: 3500, month: "August"},
{num: 5000, month: "jan"},
{num: 6000, month: "feb"}
]
4 Réponses :
utilisez reduce.
const input = [
{num: 5000, month: "September"},
{num: 6000, month: "September"},
{num: 4500, month: "August"},
{num: 3500, month: "August"},
{num: 5000, month: "jan"},
{num: 6000, month: "feb"}
];
const output = Object.values(input.reduce((a, {num, month}) => {
if(!a[month]) a[month] = {num, month, count: 1};
else {
a[month].num += num;
a[month].count += 1;
}
return a;
}, {}));
console.log(output);
--Modifier--
const input = [
{num: 5000, month: "September"},
{num: 6000, month: "September"},
{num: 4500, month: "August"},
{num: 3500, month: "August"},
{num: 5000, month: "jan"},
{num: 6000, month: "feb"}
];
const output = Object.values(input.reduce((a, {num, month}) => {
if(!a[month]) a[month] = {num, month};
else { a[month].num += num;}
return a;
}, {}));
console.log(output);
est-il possible d'ajouter le numéro d'occurrence également ?? comme [{"num": 11000, "month": "September", count: 2}, {"num": 8000, "month": "August", count: 2}, {"num": 5000, " month ":" jan ", count: 1}, {" num ": 6000," month ":" feb ", count: 1}]
Utiliser réduire pour effectuer la réduction initiale, puis la transformer en sa forme d'origine.
Il est possible de combiner cela en une seule, mais cela a été plus facile à comprendre en deux étapes distinctes.
/ p>
const months = [{
num: 5000,
month: "September"
},
{
num: 6000,
month: "September"
},
{
num: 4500,
month: "August"
},
{
num: 3500,
month: "August"
},
{
num: 5000,
month: "jan"
},
{
num: 6000,
month: "feb"
}
]
const reduced = months.reduce((result, month) => {
if (result[month.month]) {
result[month.month] += month.num
} else {
result[month.month] = month.num
}
return result;
}, {})
const results = Object.keys(reduced).map(key => ({
month: key,
num: reduced[key]
}))
console.log(results)
Vous pouvez Ou réduire le tableau à un objet ayant le mois comme touche et num comme valeur , puis mapper les Object.entries au tableau souhaité: const arr = [
{ num: 5000, month: "September" },
{ num: 6000, month: "September" },
{ num: 4500, month: "August" },
{ num: 3500, month: "August" },
{ num: 5000, month: "jan" },
{ num: 6000, month: "feb" }
];
const result2 = arr.reduce((acc, curr) => {
const ndx = acc.findIndex(e => e.month === curr.month);
if (ndx > -1) {
acc[ndx].num += curr.num;
} else {
acc.push(curr);
}
return acc;
}, []);
console.log(result2)
réduisez directement dans le tableau désiré: const arr = [
{ num: 5000, month: "September" },
{ num: 6000, month: "September" },
{ num: 4500, month: "August" },
{ num: 3500, month: "August" },
{ num: 5000, month: "jan" },
{ num: 6000, month: "feb" }
];
const reduced = arr.reduce((acc, { num, month }) => {
acc[month] = (acc[month] || 0) + num;
return acc;
}, {});
const result = Object.entries(reduced).map(([month, num]) => ({ num, month }));
console.log(result);
var container = [
{num: 5000, month: "September"},
{num: 6000, month: "September"},
{num: 4500, month: "August"},
{num: 3500, month: "August"},
{num: 5000, month: "jan"},
{num: 6000, month: "feb"}
];
let result = container.reduce((acc, c) => {
let index = acc.findIndex((v) => v.month === c.month);
index > -1 ? acc[index].num += c.num : acc.push(c);
return acc;
}, []);
console.log(result);
You can use reduce function for this.