Firebase数据库输出字母排序问题

时间:2017-12-27 15:23:31

标签: javascript firebase firebase-realtime-database

我有以下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放在循环之外(我稍后会答应!)

1 个答案:

答案 0 :(得分:1)

在Firebase数据库上执行查询时,它会为每个子项返回三条信息:

  1. 它的价值。
  2. 它的关键。
  3. 与其他子节点的相对顺序。
  4. 当您调用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);
        });
    }