从火力快照中随机选取值
Pick random value from firebase snapshot
我正在使用Firebase的foreach从这个网址获取树中的每个孩子
目标,当页面加载时,从Firebase抓取一个随机项目并显示它
数据结构
grabbit (table name)
active (for active items for sale)
category (the category of the item ie womensClothes, MensShoes etc)
unique id of the item
页面加载进入 http://gamerholic.firebase.com/grabbit/active并抓住任何一个类别并返回它。
脚本
var grabbitRef = new Firebase('https://gamerholic.firebaseIO.com/grabbit/active/');
grabbitRef.on('value', function(snapshot) {
if(snapshot.val() === null) {
alert("invalid");
} else {
// get snap shot data:
snapshot.forEach(function(snapshot) {
var name = snapshot.name();
alert(name);
});
}
});
在我有一个随机类别说"电子产品"之后,我得到了一个新的快照,并让它返回电子产品中的任何随机项目
var grabbitRef = new Firebase('https://gamerholic.firebaseIO.com/grabbit/active/'+name);
grabbitRef.on('value', function(snapshot) {
if(snapshot.val() === null) {
alert("invalid");
} else {
// get snap shot data:
snapshot.forEach(function(snapshot) {
var id = snapshot.name();
alert(id);
});
}
});
有了id,我现在可以获取项目的详细信息
var grabbitRef = new Firebase('https://gamerholic.firebaseIO.com/grabbit/active/'+name+'/'+id);
不幸的是,不可能从Firebase的列表中获取随机项目。你可以执行 limit(1) 来抓取第一项,或者 endAt().limit(1) 来抓取最后一项。
如果你使用的是forEach,你也可以像你一样抓取所有项目,然后使用Math.random随机选择一个。例如:
var i = 0;
var rand = Math.floor(Math.random() * snapshot.numChildren());
snapshot.forEach(function(snapshot) {
if (i == rand) {
// picked random item, snapshot.val().
}
i++;
});
实现此目的的一种方法是存储一个额外的子属性,其中包含列表中的每个元素,该属性将采用随机值。 我们将此属性的名称称为"randomVal"。
要选择随机条目,您可以使用 orderByChild("randomVal"),然后将查询限制为只返回一个条目。 获取此条目后,您将立即将一个新的随机值写入"randomVal"元素。
除了额外的簿记工作之外,这种方法的最大缺点是每次要选择随机元素时都需要写入数据库。 我是Firebase的新手,所以我不知道这个缺点有多严重。
此外,请确保在"randomVal"上索引数据库的这一部分,以提高查询性能。
相关文章:
- $(document).height()在刷新时随机化值(Safari 5.1.10)
- 使用当前日期生成随机id
- 从a-z中随机选择一个字母
- RequireJ无法随机加载脚本
- 单击按钮时显示随机字符串
- Ajax更新面板随机错误'PRM_MissingPanel'
- 如何检查if/else语句中的随机条件
- 是否可以自动拉取“随机”;标签“;从一长串文本中提取
- 如何使用D3生成特定范围内的随机颜色
- 如何在 Javascript/jQuery 中获取一些随机下拉列表的选定值
- 在固定位置显示随机图像
- 有效地获取两个区间之间的随机整数
- 如何获得随机灯光颜色
- 随机日期计算引导数据选取器,将天数添加到特定日期
- 从火力快照中随机选取值
- 从JS中一个大小为n的数组中随机选取m个整数
- 从JavaScript数组中随机选取不重复的项
- 从XML中随机选取url
- jQuery AJAX随机选取段落
- 从数组中选取多个随机