【问题标题】:Sort object values alphabetically [duplicate]按字母顺序对对象值进行排序[重复]
【发布时间】:2021-04-23 05:26:01
【问题描述】:

所以我正在开发一个具有排名系统的不和谐机器人。我已经到了我有一个看起来像这样的对象的地步:

let ranks = {
   "Joe": 1,
   "Mary": 6,
   "Johnson": 4
}

所以我需要按级别对它们进行排序,所以它看起来像这样:

let ranks = {
   "Mary": 6,
   "Johnson": 4,
   "Joe": 1
}

我不知道该怎么做。我尝试将值放入列表并使用 names.sort() 但这不起作用。任何帮助都会得到帮助。

【问题讨论】:

  • 这些是对象,而不是数组,它们不保证属性的顺序。见:Does JavaScript guarantee object property order?
  • 问题中没有数组,也没有 JSON。这就是为什么像sort() 这样的数组函数不起作用的原因。那是一个对象,对象属性没有固有的顺序。

标签: javascript


【解决方案1】:

我看不出对对象属性进行排序的原因。感谢Object.entries,您可以将对象转换为数组以使用排序

例如

let sortedArr = Object.entries(ranks).sort((a,b) => (b[1] -a[1]));

然后你通过Object.fromEntries()得到你的结果

let sortedObj = Object.fromEntries(sortedArr)

【讨论】:

    【解决方案2】:

    使用此代码

    let ranks = {
       "Joe": 1,
       "Mary": 6,
       "Johnson": 4,
       'Ahmed': 1
    
    }
    console.log( ranks)
    //get the keys
    var keys = Object.keys(ranks)
    var testArray = [] ;
    
    // get a new array to work on 
    keys.forEach(key=>{
      testArray.push(key)  
    })
    
    // sort the keys
     
    var sortedKeys = testArray.sort()
    
    // get the right values of the sorted keys
    
    var sortedVals = []
    sortedKeys.forEach(Skey =>{
      sortedVals.push(ranks[Skey])
    })
    
    //clear the old ranks 
    
    ranks = {}
    var i = 0;
    
    // get the new ranks object
    sortedKeys.forEach(key=>{
      ranks[key] = sortedVals[i]
      i++
    })
    
    console.log( ranks)

    【讨论】:

      猜你喜欢
      • 2013-11-02
      • 1970-01-01
      • 2011-05-08
      • 1970-01-01
      • 2018-01-27
      • 2013-10-28
      • 2019-06-15
      相关资源
      最近更新 更多