对象数组包含700个对象。我使用下划线_.each进行计算以获得平均值。代码工作正常,但计算时滞后时间很长。请参考以下代码并告知我。
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 :(得分: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)符号,即最佳,最差和平均情况。