为什么我遇到这个问题:
我试图解决一个算法问题,我需要返回数组中出现次数最多的数字。像 [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 is: 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 引擎中吗?先感谢您!