I have an array
data = [ {location: "Phnom Penh", sale: 1000 }, {location: "Kandal", sale: 500 }, {location: "Takeo", sale: 300 }, {location: "Kompot", sale: 700 }, {location: "Prey Veng", sale: 100 }, {location: "Seam Reap", sale: 800 } ];
new calculate object :
Total1 = Phnom Penh + Takeo
Total 2 = Prey Veng + Seam Reap
then I want to add these two object to existing array (data)
data = [ {location: "Phnom Penh", sale: 1000 }, {location: "Kandal", sale: 500 }, {location: "Takeo", sale: 300 }, {location: "Kompot", sale: 700 }, {location: "Prey Veng", sale: 100 }, {location: "Seam Reap", sale: 800 }, {location: "Total1", sale: 1300 }, {location: "Total2", sale: 900 } ];
Anyone please help me to do like this? Thanks
Advertisement
Answer
You could use a bespoke function that filters out the relevant objects, and then calculates their sum sales.
Here the data and an array of the locations is passed into getSales
. The required objects are filtered out, and then reduce is used to sum their sales. You can then build a new object using the data from the old object, and adding in the new data.
const data = [ {location: "Phnom Penh", sale: 1000 }, {location: "Kandal", sale: 500 }, {location: "Takeo", sale: 300 }, {location: "Kompot", sale: 700 }, {location: "Prey Veng", sale: 100 }, {location: "Seam Reap", sale: 800 } ]; function getSales(data, arr) { return data // Return the current object where the arr // includes the current object location .filter(el => arr.includes(el.location)) // Iterate over those returned objects and sum their sales .reduce((acc, { sale }) => acc += sale, 0); } const out = [ ...data, { location: 'Total1', sale: getSales(data, ['Phnom Penh', 'Takeo']) }, { location: 'Total2', sale: getSales(data, ['Prey Veng', 'Seam Reap']) } ]; console.log(out);