首先明确一点,js并不能直接对对象进行排序。常规的思路是先将对象转化为数组,对数组进行排序,然后将数组转化为对象。 用到的主要是 arr.sort( callback) 方法,没有参数的时候默认是按照字母和升序进行排序。
对象排序常见的两种场景分别是键排序,或是值排序。键排序比较简单,我们把思路简化一下,直接将键提取出来,遍历排序后的数组生成新的对象。
键排序:
let obj = {
d: "value2",
a: "value1",
c: "value3"
}
let arr = Object.keys(obj)
let rstObj = {}
for(var key of arr.sort()){
rstObj[key] = obj[key]
}
console.log( rstObj)
输出结果为: { a: 'value1', c: 'value3', d: 'value2' } 排序成功。
值排序要麻烦一点,需要将对象和数组相互转化。可以使用 Object对象提供的两个方法,Object.entries() 和 Object.fromEntries()实现将对象变为数组和将数组变为对象。
值排序:
let obj = {
a1: 32,
a2: 18,
a3: 4
}
let arr = Object.entries( obj)
arr.sort( (a,b)=>{
return a[1] - b[1]
})
let rstObj = Object.fromEntries( arr)
console.log( rstObj)
输出结果为: { a3: 4, a2: 18, a1: 32 } 排序成功。