如何防止对象数字属性的自动排序?

10 浏览
0 Comments

如何防止对象数字属性的自动排序?

为什么我会遇到这个问题:

我尝试解决一个算法问题,需要返回数组中出现次数最多的数字。例如 [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 引擎中吗?提前感谢您的帮助!

0