讓我解釋一下我在說什麼。我有以下陣列:在包含其他對象數組的對象數組上循環。並做出一定的計算
const days = [
{
date: '2016-12-13T00:00:00.000Z',
stats: [
{ name: 'A', sold: 34, },
{ name: 'B', sold: 3, },
{ name: 'C', sold: 26, },
],
},
{
date: '2016-12-14T00:00:00.000Z',
stats: [
{ name: 'D', sold: 34, },
{ name: 'E', sold: 3, },
{ name: 'F', sold: 26, },
],
},
{
date: '2016-12-14T00:00:00.000Z',
stats: [
{ name: 'D', sold: 34, },
{ name: 'E', sold: 3, },
{ name: 'F', sold: 26, },
],
},
];
我想要做的就是找到每個stat.name
因此,例如百分比。如果我們將所有銷售的價值,我們得到:189
現在發現STAT名B
(3/189) * 100
的%
哪位能給我:1.58%
這代表出售物品類別的%
。
理想的結果後,我是這樣的:
const result = [
{ name: 'A', sold: 34, percentage: '17,98%' },
{ name: 'B', sold: 3, percentage: '1,58%', },
{ name: 'C', sold: 26, percentage: '13,75%', },
{ name: 'D', sold: 68, percentage: '35,97%', },
{ name: 'E', sold: 6, percentage: '3,17%' },
{ name: 'F', sold 52, percentage: '27,51%' },
];
我做了什麼至今:
const days = [
{
date: '2016-12-13T00:00:00.000Z',
stats: [
{ name: 'A', sold: 34, },
{ name: 'B', sold: 3, },
{ name: 'C', sold: 26, },
],
},
{
date: '2016-12-14T00:00:00.000Z',
stats: [
{ name: 'D', sold: 34, },
{ name: 'E', sold: 3, },
{ name: 'F', sold: 26, },
],
},
{
date: '2016-12-14T00:00:00.000Z',
stats: [
{ name: 'D', sold: 34, },
{ name: 'E', sold: 3, },
{ name: 'F', sold: 26, },
],
},
];
let total = 0;
days.map(record => record.stats.map(category => total += category.sold)); // save the total;
const newStats = days.reduce(function (pastDay, currentDay) {
const nextStats = currentDay.stats.map(function(stat) {
const oldSold = pastDay.stats.find((old) => old.name === stat.name); // object that match by name.
let newSold;
if (oldSold) { // if matched
\t newSold = stat.sold + oldSold.sold // sum
} else { // don't sum anything
\t newSold = stat.sold
}
\t \t stat.sold = newSold;
stat.percentage = `${(newSold/total * 100).toFixed(2)}%`;
return stat;
});
return {
stats: nextStats,
};
});
console.log(newStats);
其中outsputs:
{
"stats": [
{
"name": "D",
"sold": 68,
"percentage": "35.98%"
},
{
"name": "E",
"sold": 6,
"percentage": "3.17%"
},
{
"name": "F",
"sold": 52,
"percentage": "27.51%"
}
]
}
A,B,C都不見了..
有沒有更好的方法來處理整件事情?我真的不喜歡映射和獲得總數,然後與其他人一起工作..有沒有辦法做得更好?謝謝...
我只是使用一個好的老式循環來計算所有的和。然後循環結果來完成百分比。數組上的循環是O(n)。做兩次還只是O(n)。 –