JavaScript 排序顺序错误
javascript sort in wrong order
我在javascript(node.js)排序函数没有一直以正确的顺序排序时遇到问题。我需要它对负数和正数进行排序,并首先返回最小的非负数。这是我现在使用的:
.sort(function(a, b){if(a >= 0){return a - b;}else{return 1;}});
但是,当只有一个正数,并且它经常发生在末尾时,该数字被排序为倒数第二。我可以得到一些更好的方法来实现这一点吗?
此排序函数之所以有效,是因为仅当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]
下面是使用三元运算符的一种方法:
alert([8,5,-1,-8,-2,7,1,10,1,7,-3].sort(function(a,b) {
return a*b < 0 ? b : a-b;
}));
三元运算符是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;
}));
如果a
和b
具有不同的符号(正号和负号),则此代码返回 true:
if(a*b < 0) return b;
如果b
为正,sort
将其放在负a
之前。 如果b
为负数,sort
将其放在正a
之后。
相关文章:
- Javascript执行顺序错误
- 按 [field] 值对 javascript 数组进行排序会给出错误的顺序
- 带有 CommonsChunkPlugin 的 Webpack 会导致 html 文件中的捆绑顺序错误
- For循环以错误的顺序返回promise
- Javascript错误的警报顺序
- three.js:透明对象根据相机角度按错误顺序渲染
- ES6模块初始化顺序错误
- 在Firefox中的keydown事件中隐藏元素时焦点顺序错误
- 使用 JS 填充 HTML 表,数据顺序错误
- JavaScript 排序顺序错误
- Angular + Requirejs - 以错误的顺序加载
- Mixpanel javascript 集成:连续的事件在 mixpanel 结束时以错误的顺序记录
- 视图中的 JavaScript 错误 - 加载顺序
- ReactJS:Dom 渲染顺序错误
- JQuery 错误的脚本顺序
- AngularJS$q承诺成功的回调以错误的顺序执行
- Angular orderBy:“timestamp”将事物按错误的顺序排列
- kafka节点的消息顺序错误
- 在IE8和IE7(Telerik radgrid)中以错误的顺序触发javascript事件
- angularjs ng repeat中的错误顺序