javascript - 尝试对对象中的键进行排序时结果不正确
问题描述
我正在尝试按降序对对象进行排序,如下所示:
const searchResults = {
"great": {
"length": 5,
"occurance": 301487430,
"rank": -1
},
"read": {
"length": 4,
"occurance": 322331766,
"rank": 10
},
"creditors": {
"length": 9,
"occurance": 3211591,
"rank": -1
}
}
// The way I am trying to sort is as follows:
let keys = Object.keys(searchResults);
let sortByEM = keys.sort((a, b) => Number(searchResults[b.rank]) - Number(searchResults[a.rank]));
console.log(sortByEM);
输出应该是read
first 然后great
/creditors
但当前输出是great
,read
和creditors
。这可能是什么原因?
解决方案
您试图以错误的方式访问属性。代替
searchResults[b.rank]
你正在寻找
searchResults[b].rank
您的代码searchResults[b.rank]
正在尝试访问由表达式返回的属性名称,该表达式b.rank
当然是未定义的(因为b
只是在string
这里)。searchResults.undefined
ofc 也是未定义的,因此您的排序函数会尝试从中减去undefined
-undefined
本质上这意味着您的排序函数什么都不做。
const searchResults = {
"great": {
"length": 5,
"occurance": 301487430,
"rank": -1
},
"read": {
"length": 4,
"occurance": 322331766,
"rank": 10
},
"creditors": {
"length": 9,
"occurance": 3211591,
"rank": -1
}
}
let keys = Object.keys(searchResults);
let sortByEM = keys.sort((a, b) => (searchResults[b].rank - searchResults[a].rank));
console.log(sortByEM);
推荐阅读
- c++ - 单元测试自定义 STL 兼容的容器和迭代器
- google-bigquery - 与文档相反,在 BigQuery 中读取伪列 _FILE_NAME 不是免费的
- android - 来自 Google Play 商店的 Android React Native App HostNameVerifier 错误
- ios - 如何从 Firebase 存储中查看 PDF - SwiftUI PDFVIEW
- hibernate - 如何在大量数据上使用双向关系
- javascript - 由于长请求,谷歌应用脚本奇怪的 CORS 错误
- azure-notificationhub - 天蓝色通知中心,Android 设备类别
- python - Python初学者:if语句不返回打印函数
- java - 如何在 gradle 6.7.1 中锁定依赖项?
- angular - 我如何将在 ngOnInti() 中获得的数组传递给该函数之外的图形?