首页 > 解决方案 > 尝试对对象中的键进行排序时结果不正确

问题描述

我正在尝试按降序对对象进行排序,如下所示:

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);

输出应该是readfirst 然后great/creditors但当前输出是great,readcreditors。这可能是什么原因?

标签: javascriptnode.js

解决方案


您试图以错误的方式访问属性。代替

searchResults[b.rank]

你正在寻找

searchResults[b].rank

您的代码searchResults[b.rank]正在尝试访问由表达式返回的属性名称,该表达式b.rank当然是未定义的(因为b只是在string这里)。searchResults.undefinedofc 也是未定义的,因此您的排序函数会尝试从中减去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);


推荐阅读