首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对动态对象进行排序

对动态对象进行排序
EN

Stack Overflow用户
提问于 2019-04-26 05:44:25
回答 1查看 26关注 0票数 0

目前,我有一个代码,并正在完美地工作!但是输出顺序是错误的,我尝试了所有的方法来调整它,但是我失败了。你能帮帮我吗?

代码语言:javascript
复制
...
var cdns_available = {};
$.ajax('https://cdn1.server.com/status.php').catch(function(e) { return done[1] = true; }).then(function(response) { cdns_available['cdn1'] = parseInt(response); done[1] = true;});
$.ajax('https://cdn2.server.com/status.php').catch(function(e) { return done[2] = true; }).then(function(response) { cdns_available['cdn2'] = parseInt(response); done[2] = true;});
$.ajax('https://cdn3.server.com/status.php').catch(function(e) { return done[3] = true; }).then(function(response) { cdns_available['cdn3'] = parseInt(response); done[3] = true;});
$.ajax('https://cdn4.server.com/status.php').catch(function(e) { return done[4] = true; }).then(function(response) { cdns_available['cdn4'] = parseInt(response); done[4] = true;});
$.ajax('https://cdn5.server.com/status.php').catch(function(e) { return done[5] = true; }).then(function(response) { cdns_available['cdn5'] = parseInt(response); done[5] = true;});

...

for (var key in cdns_available) {
    var value = cdns_available[key];
    $("#status_div").append(key + " server: " + value + "<br>");
}

输出是这样的:

代码语言:javascript
复制
cdn1 server: 50
cdn4 server: 133
cdn3 server: 28
cdn2 server: 19
cdn5 server: 117

或有时:

代码语言:javascript
复制
cdn5 server: 177
cdn4 server: 112
cdn1 server: 18
cdn2 server: 97
cdn3 server: 49

怎样才能使"cdn{num}“井然有序?如下所示:

代码语言:javascript
复制
cdn1 server: 45
cdn2 server: 17
cdn3 server: 48
cdn4 server: 110
cdn5 server: 38

我试过这个:

代码语言:javascript
复制
Object.entries(cdns_available).sort(function(a, b) {
    return a.localeCompare(b);
});
//Error: Uncaught TypeError: a.localeCompare is not a function

你能帮帮我吗?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-26 05:47:55

Object.entries返回一个数组。为了在键上使用localeCompare,访问每个数组中的第0项,并进行比较:

代码语言:javascript
复制
Object.entries(cdns_available)
.sort(function(a, b) {
    return a[0].localeCompare(b[0]);
})
.forEach(([key, value]) => {
  $("#status_div").append(key + " server: " + value + "<br>");
});

但是使用Promise.all要优雅得多

代码语言:javascript
复制
Promise.all(
  [
    'cdn1',
    'cdn2',
    'cdn3'
    // ...
  ]
  .map(cdn => Promise.all([cdn, $.ajax(`https://${cdn}.server.com/status.php`)]))
)
  .then(responses => {
    responses.forEach(([cdn, response]) => {
      $("#status_div").append(cdn + " server: " + response + "<br>");
    });
  });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55861433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档