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]。零是正确的,但其他数字的顺序很奇怪。这里发生了什么?
正如其他人所说,在这种情况下使用 .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)