【发布时间】:2018-10-05 22:54:39
【问题描述】:
我想以一种元素始终排在第一位的方式对数组进行排序。除此之外,顺序无关紧要。我写了以下内容并继续我的一天。
["a","b","a","b"].sort((x,y) => x === "b" ? 0 : 1);
Chrome 给了我预期的结果;
["b","b","a","a"]
但 IE 和 Safari 没有。
我了解如何获得我想要的结果,我猜问题在于浏览器对项目进行比较的方式,但我很好奇更深入的解释。
【问题讨论】:
-
"我明白如何得到我想要的结果" 你确定吗?您的比较函数调用实现定义的排序顺序。事实上,Chrome 71 并没有产生这样的结果。
-
看看这个link。返回 '0' 不会改变任何东西。改为返回“-1”。
-
@JoshLee 问题更多是关于为什么这在 Chrome 中有效。我知道这可能是一种滥用,但你能解释一下为什么会这样吗? (在 Chrome 69 中测试)
-
你的比较函数是totally inconsistent。它在 Chrome 中不起作用,只是你很幸运。
-
比较函数根据22.1.3.24 Array.prototype.sort (comparefn)无效,所以结果是不确定的,取决于使用的排序算法。你甚至不能仅仅因为它看起来正确就确定它是否有效,它可能只是因为它看起来适合你的测试用例。
标签: javascript sorting