Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何对键为数字字符串的数组进行排序_Javascript - Fatal编程技术网

Javascript 如何对键为数字字符串的数组进行排序

Javascript 如何对键为数字字符串的数组进行排序,javascript,Javascript,我需要创建一个对象,其中键是由数字组成的字符串,但我无法以正确的方式对它们进行排序: 让simple_arr=['00','11','22','33']; 设simple_obj={}; 让它变得简单{ 简单的东西; } 对于简单_obj{ console.logit2 } 对象在键方面没有顺序的概念。即使您可以通过特定浏览器中的特定数据集实现这一点,也不能保证密钥将按您想要的顺序出现 如果您真的想实现这一点,那么应该对Object.keys返回的键进行排序,并对其进行迭代 我上面的原始答案是

我需要创建一个对象,其中键是由数字组成的字符串,但我无法以正确的方式对它们进行排序:

让simple_arr=['00','11','22','33']; 设simple_obj={}; 让它变得简单{ 简单的东西; } 对于简单_obj{ console.logit2
} 对象在键方面没有顺序的概念。即使您可以通过特定浏览器中的特定数据集实现这一点,也不能保证密钥将按您想要的顺序出现

如果您真的想实现这一点,那么应该对Object.keys返回的键进行排序,并对其进行迭代


我上面的原始答案是不正确的,对象键有特定的顺序。我仍然认为,试图依赖对象键的顺序可能是个坏主意-使用映射来保留键的原始值,而不将它们强制为字符串,并在迭代时对键进行排序。

因为ES2015对象键确实有:

作为合法整数索引的字符串排在第一位,并按其值排序 不包含的字符串放在数字字符串之后,它们的顺序由条目的顺序定义 将00转换为0,以便按数值排序:

const simple_arr=['0','11','22','33']; const simple_obj={}; 让它变得简单{ 简单的东西; } 用简单的{u obj{ console.logit2
} 您不能依赖您说过要使用for-in循环的输出。虽然对象属性在ES2015中有顺序,但for in循环没有顺序。Object.keys中的数组也不可用

如果你想要订单,你需要一个数组。但在某些情况下,你也可以使用地图;见下文

此外,即使使用ES2015的属性顺序,您显示的键也永远不会按照您显示的顺序显示,因为“00”不同于“11”、“22”和“33”:它不是一个。支持它的操作的ES2015顺序是名称为标准数字字符串格式字符串的属性,按数字顺序排列,然后是按添加顺序排列的其他字符串命名属性,最后是符号命名属性

所以你的目标永远不会像你说的那样表现。使用数组

当然,如果引入前缀,使它们都不是标准数字字符串格式,并按所需顺序添加属性,则可以使用Object.getOwnPropertyNames和其他支持该顺序的操作。但我真的不会那么做

另一种选择是使用贴图,与对象不同的是,贴图始终遵循第一次使用键的顺序。如果您创建这样的贴图:

const map = new Map(simple_arr.map(key => [key, "anything"]));
…然后通过该映射循环将可靠地访问'00'条目,然后访问'11'条目,然后访问'22'条目,然后访问'33'条目:

const simple_arr=['00','11','22','33']; const map=new-Mapsimple_arr.mapkey=>[key,anything]; 用于map.entries的常量[key,value]{ console.logkey,值;
}标准数组的键始终是字符串或符号。标准数组的索引始终是数字字符串。你的意思是数组的值是数字字符串。使用a而不是对象。请阅读,这是新的-我刚刚找到答案,这反驳了我的答案。ES6并不完全是新的,但我知道90%的SO仍然相信ES5规范。提出一个关于对象属性顺序的问题,你会得到一个投票结果,在第一分钟内没有答案。无论如何,这样可能更好——这样至少不会有392454人在愚蠢的情况下使用财产订单:它足够新,以至于我不知道规范的这个非常具体的细节。它不像是有很多关于它的宣传。我很乐意修改我的答案,我必须准确。@DanPantry-取决于你在哪里玩。:-有相当多的时间。