javascript - 如何对多个 Firebase 子节点进行平均投票?

标签 javascript firebase

这个问题has been asked before但我不太明白答案。

我需要计算 Firebase 中数据数组的平均值,因此有两个步骤。

  1. 检索所有数据
  2. 确定同一数据中有多少条目
  3. 计算平均值

我的代码:

myDataRef.orderByChild("time").startAt(time-180000).endAt(time).on("child_added", function(snapshot) {
    votes = snapshot.val().vote;
    //console.log("Vote value:" + votes)
});

myDataRef.orderByChild("time").startAt(time-180000).endAt(time).on("value", function(snapshot) {
    numberOfVotes = snapshot.numChildren();
    //console.log("Number of Votes:" + numberOfVotes)
});

function calculateAverage(numberOfVotes, votes) {
    return eval(votes.join('+')) / numberOfVotes;
}

console.log(calculateAverage)

我认为我误解了一些非常基本的东西,因为我无法弄清楚如何将数据从 Firebase 查询“取出”并放入函数中。我错过了什么?

最佳答案

Firebase 异步加载数据。只有在查询数据完全加载后,您才能确定平均值。

我想到的一种方法是:

myDataRef.orderByChild("time").startAt(time-180000).endAt(time).on("value", function(snapshot) {
    var voteCount = snapshot.numChildren();
    var total = 0;
    snapshot.forEach(function(voteSnapshot) {
        total += voteSnapshot.val().vote;
    });
    console.log("Average=" + total / voteCount);
});

一些值得注意的事情:

  • 我使用单个value 事件。不知道为什么您同时使用 valuechild_added,但这似乎只会让事情变得复杂。

也可以在监听 child_ 事件时保持运行平均值,但您必须监听所有事件。

var total = 0, 
    voteCount = 0;
    query = myDataRef.orderByChild("time").startAt(time-180000).endAt(time);
query.on("child_added", function(snapshot) {
    voteCount += 1;
    total += snapshot.val().vote;
    console.log("Running average: "+total/voteCount);
});
query.on("child_removed", function(snapshot) {
    voteCount -= 1;
    total -= snapshot.val().vote;
    console.log("Running average: "+total/voteCount);
});

关于javascript - 如何对多个 Firebase 子节点进行平均投票?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31495398/

相关文章:

swift - 在 Firebase 中构建聊天应用程序的数据

ios - 基本 Swift 3 应用程序因 Firebase 崩溃

javascript - dataURL(文件/图像/pdf 任何东西)到 base64 ionic 2

javascript - 如何为 Javascript 对象中的属性设置值,该属性由键数组标识

ios - Firebase/Auth 和 FirebaseUI/Auth 有什么区别?

javascript - 函数在不应该异步运行时异步运行

java - 如何从 firebase 实时数据库中重新排序数据

javascript - 如何使用 Java 脚本从 Android 移动浏览器中获取序列号,这将来自在移动浏览器中运行的 Web 应用程序源

javascript - Jasmine : Add source method for test execution

Javascript null 检查未按预期工作