我在理解基本的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));