如果拆分失败,请执行其他操作?

时间:2018-11-15 11:59:05

标签: javascript

我正在尝试通过升序和降序在表格中排序日期,我已经通过实现以下代码设法使日期生效;

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,依此类推。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

从技术上讲,split()函数不会失败。如果您尝试拆分不具有可拆分字符的内容,则可以尝试检查数组长度是否仅为1。

类似这样的东西:

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);

答案 1 :(得分:1)

您只需要在执行日期比较之前检查两个字符串是否都是日期。如果它们都是日期,请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");