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.