这是我的代码:
let arr = [
{ a: false, index: 1 },
{ a: true, index: 2 },
{ a: false, index: 3 },
{ a: true, index: 4 },
{ a: true, index: 5 },
]
arr.sort((a, b) => a.a && !b.a ? 1 : -1)
在Chrome中,返回
[
{a: false, index: 1},
{a: false, index: 3},
{a: true, index: 2},
{a: true, index: 4},
{a: true, index: 5},
]
这是我的目标结果。
但是我在Safari中找到了相同的代码:
[
{a: false, index: 3},
{a: false, index: 1},
{a: true, index: 5},
{a: true, index: 4},
{a: true, index: 2},
]
他们有不同的结果吗?
毕竟,我通过这种方式解决了这个问题:
arr.sort(
(a, b) =>
!a.a && b.a
? -1
: a.a === b.a
? 0
: 1
)
我无法获得差异吗?
答案 0 :(得分:0)
浏览器具有sort
的不同实现。如果需要的话,可以使用其他排序/过滤器对其进行更多组织,或者更改当前的排序功能以也考虑索引。
答案 1 :(得分:0)
有很多排序算法,您可以将它们定义为两组:
稳定排序和不稳定排序
如果两个对象相等,则说排序算法是稳定的 键在排序输出中的显示顺序与在 未排序的输入。而排序算法据说是不稳定的 如果有两个或更多个具有相同键的对象没有出现在 排序前后的顺序相同。
由于ECMAScript Array.prototype.sort没有定义平台应实施的算法,因此Safari和Chrome仅使用不同的算法。
V8(Chrome)对小数组(最多10个元素)使用插入排序,对大数组使用快速排序(不稳定的排序),Safari仅使用不同的排序算法>