为了账号安全,请及时绑定邮箱和手机立即绑定

为什么对象中的负键在后面?有没有可能修复它?

为什么对象中的负键在后面?有没有可能修复它?

翻过高山走不出你 2021-11-18 20:51:50
例如let obj = {1:"asd",2:"sad"};obj[-1] = "g" 对象将是{1:"asd",2:"sad",-1:"g"}, 我需要 -1 键从一开始
查看完整描述

2 回答

?
LEATH

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),但如果你需要整数和字符串作为键,那就有问题了。


查看完整回答
反对 回复 2021-11-18
?
红颜莎娜

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]));



查看完整回答
反对 回复 2021-11-18
  • 2 回答
  • 0 关注
  • 140 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信