javascript 自定义排序函数对于字符串键和数字键的行为不同

tvz2xvvm  于 2023-02-11  发布在  Java
关注(0)|答案(1)|浏览(94)

在各种在线资源的帮助下,我创建了一个自定义排序函数,当对象的键是字符串时,它可以正常工作,但是当对象的键是数字时,它不能降序排序。

const sortObjectByKey = (obj, direction = 'asc') => {
    const keys = Object.keys(obj).sort();
    if (direction == 'desc') keys.reverse();
    // return keys;
    const sortedObject = {};
    for (value of keys) {
        sortedObject[value] = obj[value];
    }
    return sortedObject;
}

const y = { 'zebra': 'runs', 'anteater': 'eats', 'kangaroo': 'hops', 'bovine': 'moos' };
console.log(sortObjectByKey(y));
console.log(sortObjectByKey(y, 'desc'));

const x = { 2021: 'twenty one', 2020: 'twenty', 2019: 'nineteen', 2023: 'twenty three', 2022: 'twenty two', 2018: 'eighteen' };
console.log(sortObjectByKey(x));
console.log(sortObjectByKey(x, 'desc'));

当对象键是数字时,为什么降序排序不受支持?

8hhllhi2

8hhllhi21#

对象遍历顺序为:
在现代ECMAScript规范中,遍历顺序定义良好,并且在实现之间保持一致。在原型链的每个组件中,所有非负整数键(可以是数组索引的键)将首先按值升序遍历,然后按属性创建的时间升序遍历其他字符串键
来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in
因此,在遍历期间将不考虑数字键的自定义顺序。

console.log({2:'two', 1:'one'})

// prints {1:'one', 2:'two'} instead of {2:'two', 1:'one'}

相关问题