javascript - 如何对这样格式的数组进行排序?
问题描述
我试图通过“墙”对这样的数组进行排序:
[{
"536606220753305611": { "walls": 4 },
"137616812886982656": { "walls": 5 },
"189862971520843776": { "walls": 4 },
"230433188491558913": { "walls": 2 }
}]
我似乎无法使用 array.sort 从 id 中访问数组。
这是我尝试过的:
let top10 = array.sort(function(a,b){
return a.walls.localeCompare(b.walls).slice(0, 10);
});
它在这里不起作用,因为我找不到如何进入 id 数组。
我希望我记录的结果是有序的,但它显示了这个:
[ { '536606220753305611': { walls: 4 },
'137616812886982656': { walls: 5 },
'189862971520843776': { walls: 4 },
'230433188491558913': { walls: 2 } } ]
谢谢!
编码专业
解决方案
如果所需的输出是具有有序键的对象,则无法完成(JS 对象的属性本质上是无序的)。您可以先将输入转换为对象数组,然后对它们进行排序......
let data = [{
"536606220753305611": { "walls": 4 },
"137616812886982656": { "walls": 5 },
"189862971520843776": { "walls": 4 },
"230433188491558913": { "walls": 2 }
}]
// transform the input object into an array of objects of the form:
//
// [ { "long string of digits" : { walls : 4 } },
// { "long string of digits" : { walls : 2 } },
// etc.
// ]
let data0 = data[0];
let objects = Object.keys(data0).map(k => {
return { k: data0[k] }
});
let sorted = objects.sort((a, b) => {
let keyA = Object.keys(a)[0];
let keyB = Object.keys(b)[0];
return a[keyA].walls - b[keyB].walls;
});
console.log(sorted)
推荐阅读
- python - 无法加载页面以抓取文章标签
- html - 如何重新启用 HTML
- html - Bootstrap中的自定义轮播大小但响应迅速
- python - Django 无法运行 manage.py
- ios - Instagram 快速重定向 url 问题
- r - 对于 R 中的矩阵,为什么按列操作不比按行操作(应该如此)快得多
- django - 在 Django 中使用模板标签过滤二维列表
- javascript - Angular6 - canvas.drawImage()不工作
- python - 如何在 Numpy 中计算 log5(6) 等常用日志函数?
- php - array_slice 错误地计算所有元素