我如何分类考虑大于和小于考虑?

Web*_*ips 5 javascript sorting

我需要对两个字符串进行排序,并考虑>和<符号.因此,例如,排序可能看起来像

<20
<40
<100
0.1
10
1,000,000.75
>100
>1,000
Run Code Online (Sandbox Code Playgroud)

所以基本上所有带<的字符串首先是正常排序,然后是带有>符号的所有数字.我也想要尊重所显示的确切顺序(例如>从100到1000之前出现> 100时从高到高排序)

这是我的代码,没有符号(排序表中的所有行):

if ($this.hasClass('sort-mixed')) {
  sort_func = sort_mixed;
}
$rows.sort(sort_func);

function sort_mixed(a, b) {

  var val_a = $(a).children().eq(column_index).text();
  var val_b = $(b).children().eq(column_index).text();

  val_a = Number(val_a.toString().replace(/,/g, ""));
  val_b = Number(val_b.toString().replace(/,/g, ""));  

  if(val_a > val_b) {
    return 1 * sort_direction;
  }
  if(val_a < val_b) {
    return -1 * sort_direction;
  }
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

Dem*_*ian 1

使用单个比较器函数进行排序:

const order = { regular: 1, reverse: -1 };
let sortOrder = order.regular;
let strings = ['0.1', '1,000,000.75', '10', '<100', '<20', '<40', '>1,000', '>100'];

function compare(a, b) {
   function toNum(str) { return +str.replace(/[^0-9.-]/g, ''); }
   function range(str) { return { '<': -1, '>': 1 }[str[0]] || 0; }
   const rangeA = range(a);
   const rangeB = range(b);
   const score = rangeA === rangeB ? toNum(a) - toNum(b) : rangeA - rangeB;
   return score * sortOrder;
   }

strings.sort(compare);
Run Code Online (Sandbox Code Playgroud)

该函数range()检查字符串是否以'<'or开头'>',如果字符串具有不同的范围,则设置一个用于排序的值。否则,字符串将转换为数字并简单地按数字排序。

使用示例输入数据,生成的strings数组为:

["<20", "<40", "<100", "0.1", "10", "1,000,000.75", ">100", ">1,000"]
Run Code Online (Sandbox Code Playgroud)

摆弄代码: https:
//jsfiddle.net/fxgt4uzm

编辑:
添加sortOrder