私が話していることを説明しましょう。オブジェクトの追加配列を含むオブジェクトの配列をループします。特定の計算を行う
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)です。それを2回することはまだO(n)です。 –