如果拆分失败,那么做其他操作



我正试图通过升序和降序在表中排列日期,我通过实现以下代码成功地实现了这一点;

fp.onCommand.subscribe(function (e, args) {
        context._dataView.sort(function (a, b) {
            var c1 = a[args.column.field].split('/');
            var c2 = b[args.column.field].split('/');
                return c1[2] - c2[2] || c1[1] - c2[1] || c1[0] - c2[0];
        }, args.command === "sort-asc");
    });

然而,这将不会对我的其他列(包括名称、数字、小数(进行排序。当我对任何不是日期的列进行排序时,它在我的split中失败。这是我最初的代码,它完美地对每一列进行了排序,但没有对日期进行排序;

fp.onCommand.subscribe(function (e, args) {
        context._dataView.sort(function (a, b) {
            var c1 = a[args.column.field];
            var c2 = b[args.column.field];
            if (c1 > c2) {
                c1 = c1.toString().toLowerCase();
                return 1;
            }
            if (c2 > c1) {
                c2 = c2.toString().toLowerCase();
                return -1;
            }
        }, args.command === "sort-asc");
    });

我需要以某种方式对日期进行排序,同时允许我对许多其他列进行排序。如果可能的话,我需要写一些代码,比如如果拆分不起作用,那么就做我代码的第二部分。

如果可能的话,我需要保留所有的东西,所以我需要格式化日期的确切代码,但我也需要toString toLowerCase和我的c1 > c2等等

有什么建议吗?

在实现日期比较之前,您只需要检查两个字符串是否都是日期。如果它们都是日期,split并返回您已经在做的事情——否则,如果两者都不是日期,请使用原始算法。如果其中一个是日期,另一个不是,则返回1或-1,这取决于您希望日期在顶部还是底部:

const isDate = item => typeof item === 'string' && item.includes('/');
context._dataView.sort(function (a, b) {
  const c1 = a[args.column.field];
  const c2 = b[args.column.field];
  const aIsDate = isDate(c1)
  const bIsDate = isDate(c2);
  if (aIsDate && bIsDate) {
    const c1d = c1.split('/');
    const c2d = c2.split('/');
    return c1d[2] - c2d[2] || c1d[1] - c2d[1] || c1d[0] - c2d[0];
  } else if (!aIsDate && !bIsDate) {
    // Neither are dates:
    return c1 > c2 ? 1 : -1;
  } else if (aIsDate && !bIsDate) {
    return 1;
  } else {
    // bIsDate and !aIsDate
    return -1
  }
}, args.command === "sort-asc");

从技术上讲,split()函数不能失败。如果您尝试拆分没有可拆分字符的内容,可以尝试检查数组长度是否只有一。

类似这样的东西:

var a = "Hello";
var b = "Hello World";
function splitter(s) {
  var ar = s.split(" ");
  if (typeof ar == "object")
    if (ar.length > 1)
      console.log("Split Succeeded");
    else
      console.log("Split Failed");
  else
    console.log("Something wrong happened!");
}
splitter(a);
splitter(b);

最新更新