我有以下Firebase查询,它查找我的数据库中的所有系统(名为Faults的数据库)并将它们放在表中。问题是生成的表是按照我将项添加到数据库的顺序,而不是按照我的意愿按字母顺序排列。知道我错过了什么(搞砸了!)?
var theroot = firebase.database().ref("Faults/");
theroot.orderByChild("system").on("value", Show_system_table, errData);
function Show_system_table(data) {
var raw_data = data.val();
var results_array = Object.values(raw_data);
for (i = 0; i < results_array.length; i++) {
var single_item = results_array[i];
var result_name = single_item.system;
var markup = "<tr> <td>" + result_name + "</td> </tr>";
$("#system_tbl").append(markup);
}
}
function errData() {
console.log("Error issues");
}
提前致谢
彼得
PS - 我知道我应该把var放在循环之外(我稍后会答应!)
答案 0 :(得分:1)
在Firebase数据库上执行查询时,它会为每个子项返回三条信息:
当您调用data.val()
时,您将结果转换为常规JSON对象,遗憾的是只有前两个对象。因此,此时项目的顺序就会丢失。
要维护订单,请使用内置的Snapshot.forEach
方法:
function Show_system_table(data) {
data.forEach(function(snapshot) {
var single_item = snapshot.val();
var result_name = single_item.system;
var markup = "<tr> <td>" + result_name + "</td> </tr>";
$("#system_tbl").append(markup);
});
}