gpt4 book ai didi

javascript - JS 中不一致的 native Array.sort() 行为

转载 作者:行者123 更新时间:2023-11-30 09:50:55 24 4
gpt4 key购买 nike

我想通过将所有值为 2 或更大的元素移动到数组的末尾来对整数数组进行排序。但是,如果我比较两个大于或等于 2 或都小于 2 的元素,那么我希望它们保持当前顺序。我将以下比较函数与 native .sort() 一起使用:

function customSort(a, b) {
return (a >= 2 && b < 2) ? 1 : -1;
}

它似乎在以下情况下按预期工作:

[2, 3, 2, 0] => [0, 2, 3, 2]
[2, 3, 2, 0, 0, 0, 1, 0, 0, 0] => [0, 0, 0, 1, 0, 0, 0, 2, 3, 2]

但看起来一旦我超过 10 个元素,它似乎随机排序小于 2 的元素,以及大于或等于 2 的元素:

[2, 3, 2, 0, 0, 0, 1, 0, 0, 0, 0] => [0, 0, 0, 0, 0, 1, 0, 0, 3, 2, 2]
(expected result) => [0, 0, 0, 1, 0, 0, 0, 0, 2, 3, 2]

我假设三元运算符中的 -1 将始终保留左边的元素,从而保持顺序(与 0 相反,后者可以理解地随机排序) .我知道有一种不使用 native .sort() 进行排序的更好方法,但我只是对这种行为感到好奇,如果有某种方法我可以更改比较函数以使其正常工作正确使用 native .sort()

最佳答案

一种无需排序的方法是遍历它,并将大于一个的项目追加到一个数组,将其他项目追加到另一个数组,然后加入它们。

var arr = [2, 3, 2, 0, 0, 0, 1, 0, 0, 0, 0];
var shifted = [].concat.apply([],arr.reduce( function (arr, val, ind){
var ind = val > 1 ? 1 : 0;
arr[ind].push(val);
return arr;
},
[[],[]]));

关于javascript - JS 中不一致的 native Array.sort() 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36613980/

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