我不确定是否由于升级到新控制台而发生了这种情况,或者它是否一直发生,但我发现我的代码中有一个错误,其中的数字按此顺序排列:
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
}
}
}
答案 0 :(得分:1)
由于字符串是严格格式化的,因此alpha排序会为你做正确的事情,假设它是yyyy-mm-dd,所以字段的重要性是正确的顺序。
答案 1 :(得分: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;
&#13;
<p id="result"></p>
&#13;
以下是有关Array.prototype.sort
的文档https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
看起来Firebase的orderbyKey()
方法有这种类型的实现。这可以解释订单。
使用 orderByKey()对数据进行排序时,数据将按键名称按升序返回,如下所示。请注意,键只能是字符串。
https://www.firebase.com/docs/web/guide/retrieving-data.html#section-ordered-data
我无法找到此功能的源代码,因此我建议不要使用它并使用我的方法。