Chrome下数值键类型对象按键名排序

442 阅读1分钟

Chrome下数值键对象按键名排序

直接上代码

let obj = {'2': 'val2', '1': 'val1', '3': 'val3'}
console.log(obj) // Chrome、FrieFox
let sortObj = Object.create(null)
Object.keys(obj).sort().reverse().map( key => {
    sortObj[key] = obj[key]
})
console.log(sortObj)

预期的处理是为了实现对对象按键名倒序处理,但是结果确大大超出预期 -_-

Chrome下:

Firefox下:

起因:页面展示必须按年份倒序列表展示,而后端返回的数据格式升序数据集,此时就需要前端进一步处理数据,改为倒序排序方式,再在组件中渲染。

{
    ...
    '2018': [{xxx}, ...],
    '2019': [{xxx}, ...],
    '2020': [{xxx}, ...]
    ...
}

在菜鸡处理无效后,一顿稀里哗啦的搜索后,得出的结论是:Chrome使用数字键对属性进行数字排序 。具体的解答还是参照stackoverflow的原版回答会更好。

stackoverflow.com/questions/4…

stackoverflow.com/questions/6…