2016-05-29 40 views
0

順序錯誤,我不知道,如果發生這種情況爲升級到新的控制檯,或者如果它一直髮生的結果,但我剛剛發現我的代碼中有一個錯誤的這些數字變得有序像這樣:的JavaScript - 排序號碼出現在火力地堡

1, 12, 2, 21, 3, 33, 4 

所以如果我做這樣的事情:,我實際使用日期字符串

ref.orderByKey().startAt(1).endAt(20).on("value", function); 
// Returns: 1, 12, 2 
// Desired result: 1, 2, 3, 4, 12 

請注意,我用小號碼可讀性像2016-4-13這是爲什麼他們是字符串。

是否有這樣的解決方案還是我將不得不決定要犧牲查詢或鑰匙可讀性?


更多信息: 的數據是從日期的大名單得到一組日期。 startAt和endAt的唯一原因是限制用戶下載的數量。例如,要從某個特定時間獲得一週。

代碼示例

ref.orderByKey().startAt("2016-4-5").endAt("2016-4-11").on("value", function(snapshot){ 
    //returns null 
}); 

數據

{ 
    "GroupOne" : { 
    "2015-11-1" : { 
     "simplelogin:75" : 5.4, 
     "simplelogin:77" : 5.5, 
     "simplelogin:80" : 5.5 
    }, 
    "2015-11-2" : { 
     "simplelogin:75" : 5.4, 
     "simplelogin:77" : 5.6, 
     "simplelogin:80" : 5.9 
    }, 
    "2015-11-22" : { 
     "simplelogin:24" : 2.1 
    }, 
    "2015-11-3" : { 
     "simplelogin:77" : 3, 
     "simplelogin:80" : 0.2 
    }, 
    "2015-11-31" : { 
     "simplelogin:77" : 15.8 
    }, 
    "2015-11-4" : { 
     "simplelogin:77" : 5.1, 
     "simplelogin:80" : 0.3 
    }, 
    "2015-11-5" : { 
     "simplelogin:77" : 3.8 
    }, 
    "2015-11-6" : { 
     "simplelogin:75" : 0.1 
    }, 
    "2016-0-1" : { 
     "simplelogin:77" : 13.1 
    }, 
    "2016-0-10" : { 
     "simplelogin:75" : 3 
    }, 
    "2016-0-11" : { 
     "simplelogin:75" : 3 
    }, 
    "2016-0-12" : { 
     "48506d5c-319e-4f47-a29f-c47d6ed82a17" : 3.8, 
     "simplelogin:75" : 3.2 
    }, 
    "2016-0-22" : { 
     "simplelogin:78" : 1 
    }, 
    "2016-0-5" : { 
     "simplelogin:80" : 3 
    }, 
    "2016-0-8" : { 
     "simplelogin:24" : 0.9, 
     "simplelogin:77" : 3.2 
    }, 
    "2016-1-23" : { 
     "simplelogin:75" : 3.1 
    }, 
    "2016-1-27" : { 
     "simplelogin:75" : 6.3 
    }, 
    "2016-1-28" : { 
     "simplelogin:75" : 12.2 
    }, 
    "2016-2-15" : { 
     "simplelogin:75" : 1 
    }, 
    "2016-2-2" : { 
     "simplelogin:75" : 5.1 
    }, 
    "2016-2-22" : { 
     "simplelogin:75" : 1, 
     "simplelogin:78" : 1, 
     "simplelogin:80" : 1 
    }, 
    "2016-2-23" : { 
     "simplelogin:75" : 4.3 
    }, 
    "2016-2-24" : { 
     "simplelogin:75" : 5.7 
    }, 
    "2016-2-25" : { 
     "simplelogin:75" : 1 
    }, 
    "2016-2-26" : { 
     "simplelogin:75" : 2 
    }, 
    "2016-2-27" : { 
     "simplelogin:75" : 1 
    }, 
    "2016-2-28" : { 
     "simplelogin:75" : 1 
    }, 
    "2016-2-30" : { 
     "simplelogin:75" : 6 
    }, 
    "2016-3-1" : { 
     "simplelogin:75" : 2, 
     "simplelogin:77" : 2 
    }, 
    "2016-3-11" : { 
     "simplelogin:75" : 8.6, 
     "simplelogin:80" : 0.9 
    }, 
    "2016-3-12" : { 
     "simplelogin:75" : 1 
    }, 
    "2016-3-14" : { 
     "simplelogin:75" : 3.8 
    }, 
    "2016-3-6" : { 
     "simplelogin:77" : 13.2 
    }, 
    "2016-4-10" : { 
     "simplelogin:75" : 2 
    }, 
    "2016-4-15" : { 
     "simplelogin:75" : 1 
    }, 
    "2016-4-25" : { 
     "simplelogin:75" : 1 
    }, 
    "2016-4-5" : { 
     "simplelogin:75" : 6 
    } 
    } 
} 
+1

您正在對字符串進行排序......使用Date.parse(「2016-4-13」)或傳遞可以動態保存該數據字符串的whatever參數。 – Redu

+0

您包含的代碼會返回正確的數字。但是你沒有展示你如何處理它們,這意味着很難說出了什麼問題。另外:在討論存儲在Firebase數據庫中的數據時,請始終包含JSON的最小片段,以向我們展示您正在處理的數據。通過點擊Firebase控制檯中的導出按鈕,您可以輕鬆獲取JSON(如文本,請勿截圖)。 –

+0

我添加了一些更多的信息,但我認爲當前最好的答案是解決方案,在較小的數字前添加零。 –

回答

1

由於串剛性格式化,阿爾法排序會做正確的事情對你來說,假設它是YYYY-MM-DD,所以字段的意義是在正確的順序。

+0

啊對了,我只需要在單個數字前添加零。 –

0

JavaScript的排序不會按數字順序工作。它按字母順序工作更多。

按值進行排序,則必須在參數

var result = document.getElementById("result"); 
 

 
var numbers = [1, 12, 2, 21, 3, 33, 4]; 
 

 
var sorted = numbers.filter(function(number) { 
 
    return number >= 1 && number <= 20; 
 
}).sort(function(a,b) { return a - b }); 
 

 
result.innerHTML = sorted;
<p id="result"></p>

這裏傳遞是

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

它看起來Array.prototype.sort文檔像Firebase的orderbyKey()方法有這種類型的實現。這將解釋順序。

當使用orderByKey()對數據進行排序,數據將被按升序排列的按鍵名稱如下返回。請記住,鍵只能是字符串

https://www.firebase.com/docs/web/guide/retrieving-data.html#section-ordered-data

我找不到此功能的源代碼,所以我會建議不要使用它在所有並使用我的方法。