2 回答
![?](http://img1.sycdn.imooc.com/545845e900013e3e02200220-100-100.jpg)
TA贡献1936条经验 获得超6个赞
默认情况下,Javascript 不会那样做。这里有一篇很好的文章解释了它的行为方式。
Javascript 属性排序总是按时间顺序排列的,除非属性是一个正整数,这使得它成为数组索引,并且它们排在最前面并且是有序的。-1 不是正整数。它是一个字符串,所以它按照添加的顺序出现。有一个片段(下面)可以确认您报告的行为。
let obj = {};
obj["ccccc"]="ccccc";
obj["bbbbb"]="bbbbb";
obj["aaaaa"]="aaaaa";
obj[10]=10;
obj[5]=5;
obj["-2"]=-2;
obj["-3"]=-3;
obj[-22]=22;
obj[0]=0;
console.log(Reflect.ownKeys(obj));
Object.keys(obj).sort().forEach(key => console.log(key))
有多种方法可以实现您想要的行为,但是如果没有编码,您将无法获得它。最简单的方法是使用 简单地对键进行排序Object.keys(obj).sort(),但正如您从示例中看到的那样,默认情况下,进行的词法排序实际上不适用于数字。然后你想用 改进它sort((a,b) => a - b),但如果你需要整数和字符串作为键,那就有问题了。
![?](http://img1.sycdn.imooc.com/54584dd900014f6c02200220-100-100.jpg)
TA贡献1842条经验 获得超12个赞
我认为将对象用作数组是不明智的。
无论如何,-1都不是一个有效的索引键,这就是为什么它不作为其他整数属性名称排序的原因。而且你不能真正依赖财产秩序。
您可以做的是在需要时按键对值进行排序:
let obj = {1:"asd",2:"sad"};
obj[-1] = "g"
Object.keys(obj).sort((a,b) => a - b).forEach(key => console.log(key + ' => ' + obj[key]));
添加回答
举报