在数组上使用 Javascript .sort() 将所有零放在最后

Sto*_*age 3 javascript arrays sorting

我正在尝试对数组进行排序,以便所有零都在末尾。但是,我不希望列表按数字排序,零以上的所有数字都应保持相同的顺序。这是我到目前为止所得到的:

function placeZerosAtEnd(arr) {
    return arr.sort(compareForSort);
}
function compareForSort(first, second) {
    return first == 0 ? 1 : 0;
}
placeZerosAtEnd([9,0,9,1,0,2,0,1,1,0,3,0,1,9,9,0,0,0,0,0]);
Run Code Online (Sandbox Code Playgroud)

这应该返回 [9,9,1,2,1,1,3,1,9,9,0,0,0,0,0,0,0,0,0,0],但实际上返回 [3 ,9,9,1,9,2,9,1,1,1,0,0,0,0,0,0,0,0,0,0]。零是正确的,但其他数字的顺序很奇怪。这里发生了什么?

http://jsfiddle.net/v67fx4zk/

Sto*_*age 5

正如其他人所说,在这种情况下使用 .sort() 是错误的。这是我最终使用的代码,正如 elclanrs 在我最初的帖子下方的评论中所建议的那样。

function placeZerosAtEnd(arr) {
    return arr.filter(isntZero).concat(arr.filter(isZero));
}
function isntZero(element) {
    return element > 0;
}
function isZero(element) {
    return element == 0;
}
Run Code Online (Sandbox Code Playgroud)