2016-08-25 3 views
1

オブジェクト配列には700個のオブジェクトが含まれています。私はアンダースコアを使って平均を求める計算をしています。コードは正常に動作していますが、計算に時間がかかります。以下のコードを参考にして助言してください。ここ_個々のパフォーマンスの問題 - アンダースコア

typesOverall= 
Analytics:{[{ 
Analytics:{ 
area:"Digital" 
category:"Analytics" 
qId:"iBWmASYL6HQMtpzGH" 
type:"Reinvent" 
userId:"2PXk3uJqKrWeJW3RW" 
val:1.333333333333333 
}, 
{ 
Analytics:{ 
area:"Digital" 
category:"Analytics" 
qId:"iBWmASYL6HQMtpzGH" 
type:"Reinvent" 
userId:"2PXk3uJqKrWeJW3RW" 
val:1.333333333333333 
}...........]} 

_.each(typesOverall, function(val, key) { 
      result[key] = _.reduce(val, function(memo, v) { 
      return memo + v.val; 
      }, 0)/val.length * 10; 
     }); 
+0

あなたの質問に 'typesOverall'がどのようなものを含めることができますか? – Tholle

+0

@Tholle - もう一度質問を編集しました。それを参考にしてください –

答えて

1

それは、彼らが迅速な使用目的のために、この機能のを作成したことは明らかだとして_.each機能を実装するために使用を強調コード、

// The cornerstone, an `each` implementation, aka `forEach`. 
// Handles raw objects in addition to array-likes. Treats all 
// sparse array-likes as if they were dense. 

_.each = _.forEach = function(obj, iteratee, context) { 
    iteratee = optimizeCb(iteratee, context); 
    var i, length; 
    if (isArrayLike(obj)) { 
    for (i = 0, length = obj.length; i < length; i++) { 
     iteratee(obj[i], i, obj); 
    } 
    } else { 
    var keys = _.keys(obj); 
    for (i = 0, length = keys.length; i < length; i++) { 
     iteratee(obj[keys[i]], keys[i], obj); 
    } 
    } 
    return obj; 
}; 

です。よりシンプルなデータやパフォーマンスが大きな問題ではない場所で使用できます。

しかし、専門家は、独自のeach関数を実装して計算を最適化することができれば、常に奨励しています。

code performanceについて多くの懸念がある場合は、data architectureを変更し、可能な限り最適化されたコードを実装することを検討することもできます。

最適化されたコードの実装になると、ベスト、最悪および平均のケースシナリオであるBig(O)表記の知識が必要になることがあります。

関連する問題