2017-04-04 11 views
-2

私の配列は、このようなものです。たとえば、第1のオブジェクトの重量パーセンテージは20/(20 + 40) * 100 = 0.333で、これはフェーズ1に属します。javascriptのグループ要素によるオブジェクトの配列からは

結果は次のようになります。

Array= [ 
    {phase: "one", weight: "20", percentage:"0.333"}, 
    {phase: "one", weight: "40", percentage:"0.666"}, 
    {phase: "two", weight: "30", percentage:"0.3"}, 
    {phase: "two", weight: "70", percentage:"0.7"} 
] 
+0

なぜ結果で重量変化していますか? –

+0

これを解決するために通常の 'for'ループを使ってみてください。またはループを使って解決できない理由を説明してください –

+2

[オブジェクトのjavascript配列で最も効率的なgroupbyメソッドは何ですか?](http://stackoverflow.com/q/14446511/5743988) – 4castle

答えて

0

まず、フェーズとウェイトの辞書を作成して、特定のフェーズのすべてのウェイトの合計を見つけることができます。次に、位相オブジェクトをループしてパーセンテージを設定します。

const phases = [ 
 
    { phase: "one", weight: 10 }, 
 
    { phase: "one", weight: 20 }, 
 
    { phase: "two", weight: 30 }, 
 
    { phase: "two", weight: 40 } 
 
]; 
 

 
const phaseWeights = phases.reduce(
    (dict, {phase, weight}) => { 
    dict[phase] = (dict[phase] || 0) + weight; 
    return dict; 
    }, 
    Object.create(null) 
); 
 

 
phases.forEach((phaseObj) => { 
 
    const {phase, weight} = phaseObj; 
 
    phaseObj.percentage = weight/phaseWeights[phase] * 100; 
 
}); 
 

 
console.log(phases);

関連する問題