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。
答案 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对象的键值对进行排序。