2017-12-27 407 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

哎喲...這是一個很小的片段錯別字。感謝抓住他們,仍然得到我的意思彼得!我修復了這個片段。 –