gpt4 book ai didi

javascript - 我想得到我的 firebase 数据的平均值

转载 作者:行者123 更新时间:2023-12-02 23:55:06 24 4
gpt4 key购买 nike

我想在FireBase中的数据更新时对相关值进行平均。

我正在使用 Firebase 功能,但无法加载数据。我可以在事件发生时更改我想要的数据,但我无法计算数据的平均值。

exports.taverage = functions.database.ref('/User/tsetUser/monthQuit/{pushId}')
.onCreate((snapshot, context) => {
const promiseRoomUserList = admin.database().ref('/User/tsetUser/monthQuit/{pushId}').once('value');
var sum=0;
const arrayTime = [];
snapshot.forEach(snapshot => {
arrayTime.push('/User/tsetUser/monthQuit/{pushId}'.val());
})
for(let i=0; i<arrayTime.length; i++){
sum+=arrayTime[i];
}
return admin.database().ref('/User/tsetUser/inform/standardQuit').set(sum);
});

//我想要“standardQuit”值设置平均值。

最佳答案

我不知道为什么你不能计算平均值,但你的代码的一个更简单的版本是:

exports.taverage = functions.database.ref('/User/tsetUser/monthQuit/{pushId}')
.onCreate((snapshot, context) => {
return admin.database().ref('/User/tsetUser/monthQuit/{pushId}').once('value')
.then(function(snapshot) {
let sum=0;
snapshot.forEach(child => {
sum = sum + child.val();
})
let avg = sum / snapshot.numChildren();

return admin.database().ref('/User/tsetUser/inform/standardQuit').set(avg);
});
});

最大的区别:

  • 此代码从顶层和嵌套的 then() 返回 Promise。这是必需的,以便 Cloud Functions 知道您的代码何时完成,从而可以停止向您计费(并可能关闭容器)。

  • 我们只是将每个子项的值添加到总和中,因为您没有以任何其他方式使用该数组。请注意,child.val() 取决于您未共享的数据结构。因此,如果在那里失败,您需要更新获取确切值的方式(或与我们共享您的数据结构)。

  • 代码实际上是通过将总和除以子节点的数量来计算平均值。

<小时/>

考虑使用移动平均线

需要记住的一件事是,现在每次添加一个节点时您都会读取所有节点。随着节点的添加,此操作将变得越来越昂贵。考虑是否可以使用移动平均值,这不需要所有子节点,而只需要当前平均值和新的子节点。该值将是一个近似平均值,其中较新的值通常具有更大的权重,并且计算起来要便宜得多:

exports.taverage = functions.database.ref('/User/tsetUser/monthQuit/{pushId}')
.onCreate((snapshot, context) => {
return admin.database().ref('/User/tsetUser/inform/standardQuit').transaction(function(avg) {
if (!avg) avg = 0;
return (15.0 * avg + snapshot.val()) / 16.0;
});
});

关于javascript - 我想得到我的 firebase 数据的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55433399/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com