猿问

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

例如


let obj = {1:"asd",2:"sad"};

obj[-1] = "g" 

对象将是


{1:"asd",2:"sad",-1:"g"}, 

我需要 -1 键从一开始


翻过高山走不出你
浏览 173回答 2
2回答

LEATH

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

红颜莎娜

我认为将对象用作数组是不明智的。无论如何,-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]));
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答