找到唯一的和排序,后者只发生或ECMA?

时间:2014-01-28 12:30:40

标签: javascript cross-browser

var input = [1,1,2,3,10,5,3,4],
    stat = {},
    temp = [];

input.forEach(function(v) {
   stat[v] = 1;
});

for (v in stat) {
   temp.push(v);
}

console.log(temp); //["1", "2", "3", "4", "5", "10"]

“排序”是如何发生的?

修改
制作了跨浏览器的屏幕截图(请参阅评论)和jsPerf

3 个答案:

答案 0 :(得分:3)

“排序”发生在for(v in stat)中。根据ECMA脚本标准,获取密钥的顺序取决于供应商,并且一些浏览器供应商显然选择按排序顺序获取所有密钥。你不应该依赖这种“排序”“在所有浏览器中实现”。

答案 1 :(得分:2)

显然不是规则:

var input = ["c", "b", "a"],
    stat = {},
    temp = [];

input.forEach(function(v) {
   stat[v] = 1;
});

for (v in stat) {
   temp.push(v);
}

console.log(temp); //["c", "b", "a"]

我猜测排序只发生在整数键上,因此迭代一个对象与迭代一个数组是一致的。 (或者因为对象和数组在内部是相同的。)

答案 2 :(得分:1)

项目按照从 stat 对象中检索的顺序被推送到 temp 数组,但是您无法确定它是什么顺序。

您无法随意对js对象的键值对进行排序。