javascript - 是否可以使用原始 sort() 方法在我的算法中对数组进行排序?

标签 javascript arrays algorithm sorting

我想知道我是否可以像这样对这个数组进行排序:

[ 0 ,3, 1, 4, 0 ] =>   [ 1, 3, 4, 0, 0] 

细则:

  • 数组包含 0 和正数。
  • 所有的0都在最后。
  • 所有正数按升序排列。

一开始,我用的是js的原始排序功能,比如:

[0, 3, 1, 4, 0].sort(function(previous_value, former_value){
  if(previous_value == 0 && former_value != 0 ) {
      return 1;
    }else if (former_value == 0 && former_value != 0) {
      return -1;
    }else if (former_value == 0 && former_value == 0) {
      return 0;
    }else{
      return previous_value - former_value;
  }
})

然而,我失败了。我想知道是否可以使用 sort 函数实现“我的排序算法”?例如:

[0, 3, 1, 4, 0].sort(function(previous_value, former_value){
    //code goes here
})

它会得到正确的答案:

[1, 3, 4, 0, 0]

最佳答案

0 赋予更高的优先级

console.log(
  [0, 3, 1, 4, 0].sort(function(a, b) {
    return a === b ? 0 : (a === 0 ? 1 : (b === 0 ? -1 : a - b));
  })
);

如果条件展开

console.log(
  [0, 3, 1, 4, 0].sort(function(a, b) {
    if (a === b)
      return 0;
    if (a === 0)
      return 1;
    if (b === 0)
      return -1;
    return a - b;
  })
);

关于javascript - 是否可以使用原始 sort() 方法在我的算法中对数组进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38006707/

相关文章:

javascript - 具有多个动画的网格

arrays - 两个数组的最小和选择每个数组中的一半元素

java - 使用模乘逆查找字符串的秩(有重复项)

javascript - 如何在 Laravel Blade 中使用 javascript 输出未转义的 HTML?

javascript - Instagram API 显示太多图像

javascript - 表单机器人反制测试

algorithm - 如何通过实验模拟和比较各种图循环检测算法?

java - Java中高效的多线程数组构建

php - array_intersect 的对面?

python - 我该如何分析或改进我侄女基于摩尔斯电码的简单压缩算法?