排序数组出现错误,如无法读取未定义的属性(读取 'sort')

Sorting array got error like cannot read properties of undefined (reading 'sort')

我设置了排序管道。正在排序,但出现此类错误:

cannot read properties of undefined (reading 'sort')

在 angular core.js 在我的本地 运行.

这是我的订单-by.pipe.ts

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
  name: 'orderBy',
})
export class OrderByPipe implements PipeTransform {
  transform(array: any, field: string): any[] {
    array.sort((a: any, b: any) => {
      if (a[field] < b[field]) {
        return -1;
      } else if (a[field] > b[field]) {
        return 1;
      } else {
        return 0;
      }
    });
    return array;
  }
}

您需要检查 array 必须有值然后才进行排序。

同时,您应该将 array 指定为 any[] 类型,因为 sort()Array 提供的方法。

解决方案 1

array为空(nullundefined)时直接中断函数。

transform(array: any[], field: string): any[] {
  if (!array) return array;

  array.sort((a: any, b: any) => {
    if (a[field] < b[field]) {
      return -1;
    } else if (a[field] > b[field]) {
      return 1;
    } else {
      return 0;
    }
  });

  return array;
}

Sample Solution 1 on StackBlitz


解决方案 2

使用Typescript optional chaining使得.sort()array为空(nullundefined)时不会被执行。

transform(array: any[], field: string): any[] {
  array?.sort((a: any, b: any) => {
    if (a[field] < b[field]) {
      return -1;
    } else if (a[field] > b[field]) {
      return 1;
    } else {
      return 0;
    }
  });
  
  return array;
}

Sample Solution 2 on StackBlitz