代码之家  ›  专栏  ›  技术社区  ›  Suhail Gupta

尝试对对象中的键进行排序时出现错误的结果

  •  0
  • Suhail Gupta  · 技术社区  · 7 年前

    我尝试按降序排列对象,如下所示:

    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 先是然后 great / creditors 但目前输出是 伟大的 , 债权人 . 为什么会这样?

    2 回复  |  直到 7 年前
        1
  •  3
  •   connexo    7 年前

    您试图以错误的方式访问属性。而不是

    searchResults[b.rank]
    

    你在找什么

    searchResults[b].rank
    

    searchResults[b.rank] 正在尝试访问表达式返回的属性名 b.rank 这当然是未定义的(因为 b string 这里)。 searchResults.undefined ofc也是未定义的,所以排序函数尝试进行减法 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);
        2
  •  2
  •   Jacob Jonsson    7 年前

    您访问对象时出错。

    searchResults[b.rank] 应该是的 searchResults[b].rank .

    推荐文章