Object.entries()默认升序输出?如何反转其返回的键值对顺序?
Object.entries()的键顺序规律及反转输出的方法
嘿,这个问题问得很到位!先给你拍板:你观察到的这个整数键按升序输出的行为是ECMAScript规范明确规定的,会始终保持一致,不是随机或者偶然现象。
为啥会出现这种排序?
从ES6开始,JavaScript对象的属性遍历(包括Object.entries()、Object.keys()、Object.values()这几个方法)就有了固定的顺序规则:
- 第一优先级:所有能被转换为非负整数的字符串键(比如你例子里的
"100"、"2"、"7"),会按它们的数值大小从小到大排列; - 第二优先级:剩下的普通字符串键,按它们被添加到对象中的顺序来遍历;
- 最后是Symbol类型的键,同样按插入顺序排列。
你的示例里的键全都是整数类型的字符串键,所以自然会被按2 → 7 → 100的数值升序排列,得到你看到的输出结果。
怎么反转输出顺序?
想要反转Object.entries()的结果数组,最直接的办法就是用数组自带的reverse()方法:
const anObj = { 100: 'a', 2: 'b', 7: 'c' }; const reversedEntries = Object.entries(anObj).reverse(); console.log(reversedEntries); // 输出:[ ['100', 'a'], ['7', 'c'], ['2', 'b'] ]
不过要注意,reverse()是原地修改原数组的方法,如果不想破坏原本的entries数组,可以先复制一份再反转:
const originalEntries = Object.entries(anObj); // 用扩展运算符复制数组 const reversedEntries = [...originalEntries].reverse(); // 或者用slice()方法复制:originalEntries.slice().reverse()
如果你的需求不只是单纯反转,而是想按自定义规则排序(比如按键的数值逆序),也可以用sort()方法来实现:
// 按键的数值从大到小排序 const reversedByNum = Object.entries(anObj).sort(([keyA], [keyB]) => { return Number(keyB) - Number(keyA); }); console.log(reversedByNum); // 同样得到:[ ['100', 'a'], ['7', 'c'], ['2', 'b'] ]
这样就能灵活控制输出顺序啦~
内容的提问来源于stack exchange,提问作者cidetto
相关产品推荐
相关产品推荐

