在* ngFor with directive中使用的排序对象数组

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

标签: angular

使用Angular,我创建了一个带有sort指令的表,该指令根据单击的标题对表进行排序。但是,如果输入数据具有任何空值,则sort指令将无法正常工作。

这是我在指令中的排序函数:

  sortArray (): Array<any> {
    let tempArray: Array<any> = this.data;
    tempArray.sort((a, b) => {
      let aKey = a[this.key];
        let str1: string = a[this.key].toLowerCase();
        let str2: string = b[this.key].toLowerCase();
        if (this.toggleSort) {
          if (str1 < str2) {
            return -1;
          }
          if (str1 > str2) {
            return 1;
          }
        }
        else {
          if (str1 > str2) {
            return -1;
          }
          if (str1 < str2) {
            return 1;
          }
        }
      return 0;
    });
    return tempArray;
  }

如何才能使其处理空值?

我附上了Stackblitz for this issue.

1 个答案:

答案 0 :(得分:1)

sortArray (): Array<any> {
    let tempArray: Array<any> = this.data;
    tempArray.sort((a, b) => {
      let aKey = a[this.key];
        let str1: string = a[this.key].toLowerCase();
        let str2: string = b[this.key].toLowerCase();
        if (this.toggleSort) {
          if (!str1 && !str2) {
            return 0;
          } else if (!str1) {
            return 1;
          } else if (!str2) {
            return -1;
          }

          //rest of your logic if neither is null
          if (str1 < str2) {
            return -1;
          }
          if (str1 > str2) {
            return 1;
          }
        }
        else {
          if (str1 > str2) {
            return -1;
          }
          if (str1 < str2) {
            return 1;
          }
        }
      return 0;
    });
    return tempArray;
  }