关于Array.sort()中compareFunction返回值的排序结果疑问
JavaScript数组sort方法的返回值疑问
先看这段测试代码:
function function1() { let array1 = ['3', '5', '10', '1', '4']; array1.sort(function (x, y) { return 1; }); alert(array1); } function1();
运行结果显示排序后array1保持不变;当把返回值改为-1时,array1会被反转。
sort方法的compareFunction规则
sort方法的基本用法是:
array1.sort(compareFunction)
其中compareFunction的语法为:
function (x, y){ /* 函数体代码 返回一个值 */ }
这个函数的返回值决定了数组元素的排序顺序:
- 返回负数:x会排在y之前
- 返回正数:y会排在x之前
- 返回0:x和y的位置保持不变
核心疑问:返回1时数组为何不变?
按照上述规则,返回正数时y应该排在x之前,但实际测试返回1时数组却保持原样,这是因为JavaScript的sort方法依赖符合传递性的比较函数。
当你固定返回1时,这个比较函数是无效的——它不满足排序算法要求的传递性(比如若a应在b前,b应在c前,那么a必须在c前)。这种情况下,排序算法无法生成有效的排序逻辑,最终会保留数组的原始顺序(算法不会执行任何有效的元素交换)。
而返回-1时,相当于告诉算法“每一个y都要排在x前面”,也就是每次比较后都把后一个元素放到前一个元素的位置,最终整个数组被反转。
返回0时,所有元素的相对位置都不会改变,数组自然保持原样。
内容的提问来源于stack exchange,提问作者jerseypizza
相关产品推荐
相关产品推荐

