在各种在线资源的帮助下,我创建了一个自定义排序函数,当对象的键是字符串时,它可以正常工作,但是当对象的键是数字时,它不能降序排序。
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'));
当对象键是数字时,为什么降序排序不受支持?
1条答案
按热度按时间8hhllhi21#
对象遍历顺序为:
在现代ECMAScript规范中,遍历顺序定义良好,并且在实现之间保持一致。在原型链的每个组件中,所有非负整数键(可以是数组索引的键)将首先按值升序遍历,然后按属性创建的时间升序遍历其他字符串键
来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in
因此,在遍历期间将不考虑数字键的自定义顺序。