我不确定这是否是升级到新控制台的结果,还是总是发生这种情况,但我刚刚在代码中发现了一个错误,在代码中,数字是这样排序的:
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
}
}
}发布于 2016-05-29 18:27:04
由于字符串是严格格式化的,alpha排序将为您做正确的事情,假设它是yyyy,所以字段的重要性是按正确的顺序排列的。
发布于 2016-05-29 18:08:22
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>
以下是关于Array.prototype.sort的文档
看起来Firebase的orderbyKey()方法具有这种类型的实现。这就解释了命令。
当使用orderByKey()对数据进行排序时,数据将按键名按升序返回,如下所示。请记住,键只能是字符串。
https://www.firebase.com/docs/web/guide/retrieving-data.html#section-ordered-data
我找不到这个函数的源代码,所以我建议不要使用它,也不要使用我的方法。
https://stackoverflow.com/questions/37513166
复制相似问题