如何以最有效的方式在crossfilter组中找到avg

时间:2017-08-22 11:45:08

标签: javascript

我希望通过对数据中的类似内容进行分组来找到数据中的平均值。

例如,我在这样的对象中有数据:

var data = [
        { key: 'A', value: 1 },
        { key: 'A', value: 6 },
        { key: 'B', value: 8 },
        { key: 'B', value: 9 },
        { key: 'A', value: 7 },
        { key: 'A', value: 6 },
        { key: 'C', value: 8 },
        { key: 'A', value: 9 }
    ];

如何在不重新计算每个步骤的平均值的情况下找到平均键值(因为我不能立刻知道计数)?

如果我想在一次迭代中找到它,那么最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

您可以将哈希表用于结果对象以及其他信息,例如sumcount

在每个循环中,使用新值和平均值更新结果集。

var data = [{ key: 'A', value: 1 }, { key: 'A', value: 6 }, { key: 'B', value: 8 }, { key: 'B', value: 9 }, { key: 'A', value: 7 }, { key: 'A', value: 6 }, { key: 'C', value: 8 }, { key: 'A', value: 9 }],
    hash = Object.create(null),
    result = [];
    
data.forEach(function (o) {
    if (!hash[o.key]) {
        hash[o.key] = { _: { key: o.key, avg: 0 }, sum: 0, count: 0 };
        result.push(hash[o.key]._);
    }
    hash[o.key].sum += o.value;
    hash[o.key].count++;
    hash[o.key]._.avg = hash[o.key].sum / hash[o.key].count;
});

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }