Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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 为什么在Chrome中排序行为不同?_Javascript_Sorting - Fatal编程技术网

Javascript 为什么在Chrome中排序行为不同?

Javascript 为什么在Chrome中排序行为不同?,javascript,sorting,Javascript,Sorting,我想以一种元素类型总是第一位的方式对数组进行排序。除此之外,顺序是无关紧要的。我写了以下内容,继续我的一天 ["a","b","a","b"].sort((x,y) => x === "b" ? 0 : 1); Chrome给了我预期的结果 ["b","b","a","a"] 但是IE和Safari没有 我知道如何得到我想要的结果,我想问题在于浏览器在项目之间进行比较的方式,但我想得到更深入的解释 您的问题的答案如下: 简而言之,您的比较函数不正确,它应该返回1,-1,0作为返回值,例

我想以一种元素类型总是第一位的方式对数组进行排序。除此之外,顺序是无关紧要的。我写了以下内容,继续我的一天

["a","b","a","b"].sort((x,y) => x === "b" ? 0 : 1);
Chrome给了我预期的结果

["b","b","a","a"]
但是IE和Safari没有


我知道如何得到我想要的结果,我想问题在于浏览器在项目之间进行比较的方式,但我想得到更深入的解释

您的问题的答案如下:

简而言之,您的比较函数不正确,它应该返回
1,-1,0
作为返回值,例如:

array.sort(function(a, b) {
    if (a.id < b.id) return -1;
    if (a.id > b.id) return 1;
    return 0;
})
array.sort(函数(a,b){
如果(a.idb.id)返回1;
返回0;
})

您的问题的答案如下:

简而言之,您的比较函数不正确,它应该返回
1,-1,0
作为返回值,例如:

array.sort(function(a, b) {
    if (a.id < b.id) return -1;
    if (a.id > b.id) return 1;
    return 0;
})
array.sort(函数(a,b){
如果(a.idb.id)返回1;
返回0;
})

“我知道如何获得我想要的结果”你确定吗?比较函数调用实现定义的排序顺序。事实上,Chrome71不会产生这样的结果。返回“0”不会更改任何内容。返回“-1”。@JoshLee问题更多的是为什么这在Chrome中起作用。我知道这可能是一种误用,但你能解释一下为什么会这样吗?(在Chrome 69中测试)您的比较功能是。它在Chrome中不起作用,你只是幸运而已。根据,比较函数无效,因此结果未定义,取决于使用的排序算法。你甚至不能仅仅因为它看起来是正确的就确定它是否有效,这可能只是因为它似乎适合你的测试用例。“我知道如何得到我想要的结果”你确定吗?比较函数调用实现定义的排序顺序。事实上,Chrome71不会产生这样的结果。返回“0”不会更改任何内容。返回“-1”。@JoshLee问题更多的是为什么这在Chrome中起作用。我知道这可能是一种误用,但你能解释一下为什么会这样吗?(在Chrome 69中测试)您的比较功能是。它在Chrome中不起作用,你只是幸运而已。根据,比较函数无效,因此结果未定义,取决于使用的排序算法。您甚至不能仅仅因为它看起来是正确的就确定它是否有效,可能只是因为它看起来适合您的测试用例。