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中不起作用,你只是幸运而已。根据,比较函数无效,因此结果未定义,取决于使用的排序算法。您甚至不能仅仅因为它看起来是正确的就确定它是否有效,可能只是因为它看起来适合您的测试用例。