【发布时间】:2022-01-17 10:13:52
【问题描述】:
我正在尝试在网页上反映我的应用程序中的高分排行榜。继旧的raywenderlich tutorial 之后,我正在使用 CloudKit JS 和 Knockout 来完成此任务。 当然,我想按分数从高到低排序。
教程中的示例代码使用:
var query = { recordType: 'CD_FinalScore', sortBy: [{ fieldName: 'CD_score'}] };
(当然,我为示例插入了我的 recordType 和 fieldName。)这并没有给我想要的结果,所以我在查询获取的记录上添加了一个排序方法:
self.items(records.sort(function(a, b){return b - a}));
这给了我在 Firefox 上想要的结果,但在 Safari 上却没有(顺序相反)。 我的直觉告诉我,我需要关注查询签名。 有人可以告诉我我做错了什么或不完整吗?谢谢! 作为参考,完整的 Knockout 视图模型代码在这里:
function LeaderboardViewModel() {
var self = this;
var container = CloudKit.getDefaultContainer();
var publicDB = container.publicCloudDatabase;
self.items = ko.observableArray();
self.fields = ko.observable('');
self.fields.CD_score = ko.observable('');
self.fields.CD_userName = ko.observable('');
self.fields.CD_submitDate = ko.observable('');
self.fetchRecords = function() {
var query = { recordType: 'CD_FinalScore', sortBy: { fieldName: 'CD_score' } };
// Execute the query.
return publicDB.performQuery(query).then(function(response) {
if(response.hasErrors) {
console.error("response errors: " + response.errors[0]);
return;
}
var records = response.records;
var numberOfRecords = records.length;
if (numberOfRecords === 0) {
console.error('No matching items');
return;
}
//self.items(records); // this is per the original, tutorial
self.items(records.sort(function(a, b){return b - a}));
});
};
container.setUpAuth().then(function(userInfo) {
console.log("setUpAuth");
self.fetchRecords();
});
}
ko.applyBindings(new LeaderboardViewModel());
});
【问题讨论】:
-
Safari 的结果是什么?
-
相同的结果只是以相反的顺序(从最低到最高)。
-
假设
records是一个普通对象数组,b - a比较将返回NaN。 可能 Safari 处理这些的方式与 Firefox 不同(传递给sort的比较函数应该返回一个数字)。您能否给我们一个您的数据示例,以便我们尝试重现? -
P.S.感觉你正在使用的这个 API 应该负责排序。但如果你想在客户端做,这里是a QA about sorting arrays of objects by one of their properties。
-
抱歉回复晚了.. 数据返回如下: 'code'{"items": [ {"recordName":"A0EAC4B5-DBDD-9DD8-6C13-5765C6CBFF64", "recordType ":"CD_FinalScore", "fields": {"CD_score": {"value":200, "type":"INT64"}, "CD_submitDate": {"value":1639153595598, "type":"TIMESTAMP"} , "CD_userIdentifier": {"value":"0001", "type":"STRING"}, "CD_userName": {"value":"SomeoneElse", "type":"STRING"} }, ] } '代码'