如何防止对象数字属性的自动排序?
- 论坛
- 如何防止对象数字属性的自动排序?
10 浏览
如何防止对象数字属性的自动排序?
为什么我会遇到这个问题:
我尝试解决一个算法问题,需要返回数组中出现次数最多的数字。例如 [5,4,3,2,1,1] 应该返回 1。
而且,当有两个数字同时出现最多次数时,返回最先出现的数字。例如 [5,5,2,2,1] 应返回5,因为5先出现。我使用一个对象来存储每个数字的出现次数,其中键是数字本身。
所以当输入是 [5,5,2,2,1] 时,我的对象应该是
Object {5: 2, 2: 2, 1: 1}
,但实际上我得到的是 Object {1: 1, 2: 2, 5: 2}
。
所以当我使用 for..in 来迭代对象时,我得到的是2而不是5。这就是我提出这个问题的原因。
这个问题发生在 Chrome 控制台中,我不确定这是否是一个常见问题:
当我运行以下代码时:
var a = {}; a[0]=1; a[1]=2; a[2]=3;
a 的值是:Object {0: 1, 1: 2, 2: 3}
。
但是当我改变赋值的顺序时,像这样:
var a = {}; a[2]=3; a[1]=2; a[0]=1;
a 的值还是:Object {0: 1, 1: 2, 2: 3}
。
数字属性会自动按升序排序。
我尝试在数字属性前面或后面添加前缀或后缀,例如
var a = {}; a['p'+0]=1; a['p'+1]=2; a['p'+2]=3; console.log(a);//Object {p0: 1, p1: 2, p2: 3}
这样可以保持属性的顺序。这是解决问题的最佳方法吗?有没有办法阻止这种自动排序行为?这只发生在 Chrome V8 JavaScript 引擎中吗?提前感谢您的帮助!