【问题标题】:Sorting array got error like cannot read properties of undefined (reading 'sort')排序数组出现错误,例如无法读取未定义的属性(读取“排序”)
【发布时间】:2021-09-08 03:48:54
【问题描述】:

我设置了排序管道。它正在排序,但我得到了这种类型的错误:

无法读取未定义的属性(读取“排序”)

在我本地运行的 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.sort 之前做一个 console.log 来检查数组中的值

标签: angular typescript sorting pipe


【解决方案1】:

您需要检查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

【讨论】:

  • 我收到类型错误 TypeError: Cannot assign to read only property '0' of object '[object Array]' for [items]="buildings$ | async | orderBy: 'buildingName'"跨度>
  • 您好,您面临的问题似乎是扩展名/与此问题无关。我建议您通过提供一个最小的、可重现的示例来创建一个新问题。期待您的提问。
  • 感谢永顺。我刚刚找到的答案是在排序之前创建数组的副本 transform(array: any[], field: string): any[] { if (!array) return array;数组 = [...数组]; array.sort((a: any, b: any) => { if (a[field] b[field]) { return 1 ; } 其他 { 返回 0; } });返回数组; }
猜你喜欢
  • 2021-09-16
  • 2021-08-26
  • 2018-05-03
  • 1970-01-01
  • 1970-01-01
  • 2021-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多