javascript – 如何对大于和小于考虑的内容进行排序?

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

<20
<40
<100
0.1
10
1,000,000.75
>100
>1,000

所以基本上所有字符串都与<首先是正常排序,然后是所有带有>的数字.符号.我还想要尊重所显示的确切顺序(例如,当从低到高排序时>>出现> 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(/,""));  

  if(val_a > val_b) {
    return 1 * sort_direction;
  }
  if(val_a < val_b) {
    return -1 * sort_direction;
  }
  return 0;
}
最佳答案
使用单个比较器功能排序:

const order = { regular: 1,reverse: -1 };
let sortOrder = order.regular;
let strings = ['0.1','1,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);

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

使用示例输入数据,生成的字符串数组是:

["<20","<40","<100","0.1","10","1,000.75",">100",">1,000"]

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

编辑:
添加了sortOrder.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...