gpt4 book ai didi

Javascript 排序 - 奇怪的行为,知道吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:43:00 25 4
gpt4 key购买 nike

如果我这样做

['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'k'].sort( function(a,b){ return a.length - b.length } )

输出

["a", "b", "c", "d", "e", "f", "g", "h", "i", "k"]

但是当我这样做时(在末尾添加了一个元素“l”)

['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'k', 'l'].sort( function(a,b){ return a.length - b.length } )

输出

["f", "a", "c", "d", "e", "b", "g", "h", "i", "k", "l"]

发生这种情况是否有任何具体原因,或者这只是一个怪癖?

PS:与this question相关.我在 chrome 上测试了它,从昨天开始它就一直困扰着我:)

最佳答案

我没有在当前的 V8 代码中找到章节和诗句,但是 this bug ticket表示 Chrome 对长度 <= 10 的数组使用插入排序,否则使用快速排序。

插入排序算法是稳定的,也就是说给定两个相等的元素,它会保持它们在数组中的相对位置。另一方面,快速排序算法不稳定 - 它会在随机相对位置留下相等的元素。

这都是允许的per the specification :

The sort is not necessarily stable (that is, elements that compare equal do not necessarily remain in their original order)

用户不得依赖确定性的排序顺序。

关于Javascript 排序 - 奇怪的行为,知道吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37020643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com