2017-12-27 376 views
0

我有以下Firebase查询,可以查找我数据库中的所有系统(数据库称为Faults)并将它们放入表中。问题在于生成的表格按照我将这些项目添加到数据库的顺序,而不是按照字母顺序添加。任何想法,我已经错过了(搞砸了!)?Firebase数据库输出按字母顺序排序问题

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

'orderByValue',而不是'orderByChild'没有帮助? 来自 - https://firebase.google.com/docs/database/web/lists-of-data#sort_data – xadhix

+0

你好 - 可能是我,但是这导致了这个错误信息。未捕获的错误:Query.orderByValue失败:使用1个参数调用。预计没有。 – PeterW

+0

@PeterW不会在'orderByValue()'里面添加任何内容.. ..不接受参数.. –

回答

1

当您执行的查询Firebase数据库它会为每个小孩返回三条信息:

  1. 它的值。
  2. 它的关键。
  3. 它与其他子节点的相对顺序。

当你调用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); 
    }); 
} 
+0

弗兰克 - 大量感谢您的快速和优秀的帮助,它的工作完美。有三个小问题使用上面的代码的人应该知道。 1 /在第三行错字,而不是快照。 2/.val需要()添加。最后3 /倒数第二行需要);最后关闭该功能。小事情,容易修复,不应该减损你的答案。再次感谢,我真的很感激。彼得 – PeterW

+0

哎哟...这是一个很小的片段错别字。感谢抓住他们,仍然得到我的意思彼得!我修复了这个片段。 –