Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 查找唯一和排序,后者是仅发生还是由ECMA执行?_Javascript_Cross Browser - Fatal编程技术网

Javascript 查找唯一和排序,后者是仅发生还是由ECMA执行?

Javascript 查找唯一和排序,后者是仅发生还是由ECMA执行?,javascript,cross-browser,Javascript,Cross Browser,“排序”是如何发生的 编辑: 生成跨浏览器屏幕截图(请参见注释)和。项按从stat对象检索的顺序推送到临时数组,但您无法决定其顺序 您不能随意对js对象的键值对进行排序。项会按从stat对象检索的顺序推送到临时数组,但您无法决定它们的顺序 您不能随意对js对象的键值对进行排序。显然不是规则: var input = [1,1,2,3,10,5,3,4], stat = {}, temp = []; input.forEach(function(v) { stat[v] =

“排序”是如何发生的

编辑:
生成跨浏览器屏幕截图(请参见注释)和。

项按从stat对象检索的顺序推送到临时数组,但您无法决定其顺序

您不能随意对js对象的键值对进行排序。

项会按从stat对象检索的顺序推送到临时数组,但您无法决定它们的顺序

您不能随意对js对象的键值对进行排序。

显然不是规则:

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"]
我猜排序只发生在整数键上,这样迭代对象与迭代数组是一致的。(或者这是因为对象和数组在内部是相同的。)

显然不是规则:

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"]

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

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

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

Ehmm,这不是对我问题的回答。
temp
按升序排序。这是怎么发生的?当我试图从你的答案中得出答案时,你说,默认情况下,对象的键按升序排序?这就是所有的跨浏览器,甚至ECMA约定吗?stat有一个内部顺序,在某种程度上,它可能看起来像键被铸造成字符串,并按升序排列。这与tho不一致。我通常依靠第三方工具,如下划线来执行排序@阿蒙纳迪尔:“这可能看起来像是钥匙被铸成字符串并按升序排列”——显然不是我的答案。不管怎么说,这没有意义,对象键首先总是字符串。似乎发生的事情是,它们被转换成整数,而真正代表整数的键得到特殊处理。嗯,这不是我问题的答案。
temp
按升序排序。这是怎么发生的?当我试图从你的答案中得出答案时,你说,默认情况下,对象的键按升序排序?这就是所有的跨浏览器,甚至ECMA约定吗?stat有一个内部顺序,在某种程度上,它可能看起来像键被铸造成字符串,并按升序排列。这与tho不一致。我通常依靠第三方工具,如下划线来执行排序@阿蒙纳迪尔:“这可能看起来像是钥匙被铸成字符串并按升序排列”——显然不是我的答案。不管怎么说,这没有意义,对象键首先总是字符串。似乎发生的是,它们被转换成整数,而真正代表整数的键得到了特殊处理。谢谢。您有ECMA标准的参考资料吗?否则答案很好+1告诉你,你如何区分排序是在检索时进行还是在插入时进行?@millimoose是的,这方面的参考也不错。;-)如果我找到了那个参考文献,我也会发现重复的问题。我的观点是,差异实际上并不重要。出于性能原因,在插入时这样做可能更有意义——您可以将所有整数键放入某种有序的数据结构中,将字符串键放入哈希表中,并在迭代这两种结构中的yield键时。观察差异的一种方法可能是在迭代过程中添加一个新的密钥——假设这是允许的,在一种情况下,不应该达到新的密钥,因为迭代将在键的排序副本上工作,在另一种情况下,如果它比其他密钥大,则将达到。您有ECMA标准的参考资料吗?否则答案很好+1告诉你,你如何区分排序是在检索时进行还是在插入时进行?@millimoose是的,这方面的参考也不错。;-)如果我找到了那个参考文献,我也会发现重复的问题。我的观点是,差异实际上并不重要。出于性能原因,在插入时这样做可能更有意义——您可以将所有整数键放入某种有序的数据结构中,将字符串键放入哈希表中,并在迭代这两种结构中的yield键时。观察差异的一种方法可能是在迭代过程中添加一个新的密钥-假设这是允许的,在一种情况下,新的密钥不应该被达到,因为迭代将在键的排序副本上工作,在另一种情况下,如果它比其他键更大,那么它将达到。在新计算机上:。报道说IE截图在前面有一个对话!但IE11仍然有效似乎在新机器上“跨浏览器”工作:。报道说IE截图在前面有一个对话!但IE11仍然有效