reactjs 从材料表customSort函数内部获取排序顺序(asc/desc)

cclgggtu  于 2023-01-12  发布在  React
关注(0)|答案(1)|浏览(177)

我新的Reactjs和我试图排序的日期...问题是日期有空值,我希望空日期总是出现在最后,无论顺序(“asc”或“desc”)....我在堆栈溢出中看到过很多例子,他们通过检查顺序来使用自定义排序...无论是asc还是desc....我正在使用materialtable,但无法获取排序顺序....我如何获取排序顺序,以便能够实现自定义排序,其中空日期始终出现在最后....无论是asc还是desc
我已经尝试了自定义排序:(a,B)=〉{ return(b.付款日期!= null)-(a.付款日期!= null)||a.付款日期- B.付款日期;}
这种类型....在我的列....但它的工作只有一种方式....我想得到的顺序...所以我可以写它根据asc或desc

eblbsuwk

eblbsuwk1#

根据您的示例,customSort函数的行为似乎与Array.sort()的比较函数类似。
此外,it looks like如果顺序为降序,则customSort函数将字符串“desc”作为第4个参数传递

if (columnDef.customSort) {
  if (this.orderDirection === "desc") {
    result = list.sort((a, b) => columnDef.customSort(b, a, "row", "desc"));
  } else {
    result = list.sort((a, b) => columnDef.customSort(a, b, "row"));

因此,您可以向customSort添加第四个参数,并基于它以不同的方式处理空值的排序;考虑到如果order == 'desc',调用者交换a和B。

customSort: (a, b, type, order) => {
  let desc = order == "desc";
  
  if (a.paymentDate !== null && b.paymentDate !== null)
    return a.paymentDate - b.paymentDate;
  else if (a.paymentDate !== null)
    return desc ? 1 : -1;
  else if (b.paymentDate !== null)
    return desc ? -1 : 1;
  else
    return 0;
}

相关问题