javascript排序错误

时间:2015-01-30 16:43:20

标签: javascript node.js

我在使用javascript(node.js)排序函数时遇到问题,而不是一直按正确的顺序排序。我需要它来排序负数和正数,并首先返回最小的非负数。这就是我现在正在使用的:

.sort(function(a, b){if(a >= 0){return a - b;}else{return 1;}});

但是当只有一个正数,并且它经常发生时,该数字按倒数第二个排序。我可以帮助更好地实现这个目标吗?

2 个答案:

答案 0 :(得分:2)

此排序功能有效,因为如果ab位于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

的一种方法

&#13;
&#13;
alert([8,5,-1,-8,-2,7,1,10,1,7,-3].sort(function(a,b) {
  return a*b < 0 ? b : a-b;
}));
&#13;
&#13;
&#13;

三元运算符是if ... else的快捷方式,因此上述内容相当于写作:

&#13;
&#13;
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;
&#13;
&#13;

如果ab有不同的符号(正面和负面),则此代码返回true:

if(a*b < 0) return b;

如果b为肯定,则sort放置在否定a之前。如果b为否定,sort放在正面a之后。