我在使用javascript(node.js)排序函数时遇到问题,而不是一直按正确的顺序排序。我需要它来排序负数和正数,并首先返回最小的非负数。这就是我现在正在使用的:
.sort(function(a, b){if(a >= 0){return a - b;}else{return 1;}});
但是当只有一个正数,并且它经常发生时,该数字按倒数第二个排序。我可以帮助更好地实现这个目标吗?
答案 0 :(得分:2)
此排序功能有效,因为如果a
与b
位于0的同一侧,它只对数字进行排序:
function SortNonNegativesFirst(a,b){
if((a>=0) == (b>=0)) // Checks if both numbers are on the same side of zero
return a-b;
return a<b; // One is negative, one is positive, so return whether a is negative
}
console.log([1,6,8,4,-3,5,-2,3].sort(SortNonNegativesFirst)); //[1, 3, 4, 5, 6, 8, -3, -2]
答案 1 :(得分:1)
这是使用ternary operator:
的一种方法
alert([8,5,-1,-8,-2,7,1,10,1,7,-3].sort(function(a,b) {
return a*b < 0 ? b : a-b;
}));
&#13;
三元运算符是if ... else
的快捷方式,因此上述内容相当于写作:
alert([8,5,-1,-8,-2,7,1,10,1,7,-3].sort(function(a,b) {
if(a*b < 0) return b;
else return a-b;
}));
&#13;
如果a
和b
有不同的符号(正面和负面),则此代码返回true:
if(a*b < 0) return b;
如果b
为肯定,则sort
将放置在否定a
之前。如果b
为否定,sort
将放在正面a
之后。