Array.protype.sort()返回正值时不更改顺序



我在理解基本的sort()函数时遇到了一点困难。

我所要做的就是将数组的所有0移动到数组的末尾,而不更改其他元素的顺序。在文档中,我读了100倍:

如果compareFunction(a,b(返回的值大于0,则将b排序为索引低于a(即b优先(。

现在我正在做:

function moveZeros(arr) {
return arr.sort((a, b) => a === 0 ? 1 : 0)
}
const input = [1,2,0,1,0,1,0,3,0,1]
document.write(moveZeros(input));

但秩序并没有改变。用-1将零放在数组的前面是有效的,但向前移动它们似乎不起作用,我似乎不明白为什么。我错过了什么?

您需要使用这两个值进行排序。

这种方法采用布尔否定值的差值。

在这种情况下,零变为true,并且所有零值都移动到右侧。

[
all truthy values, like numbers not zero
all falsy values, like zero
]

function moveZeros(arr) {
return arr.sort((a, b) => !a - !b);
}
console.log(moveZeros([1, 2, 0, 1, 0, 1, 0, 3, 0, 1]));

您不认为参数b也可以是0

function moveZeros(arr) {
return arr.sort((a, b) => a === 0 ? 1 : (b === 0 ? -1 : 0));
}
const input = [1, 2, 0, 1, 0, 1, 0, 3, 0, 1];
console.log(moveZeros(input));

最新更新