如何检查通过Angular中的数组循环的文件扩展名?

Posted

技术标签:

【中文标题】如何检查通过Angular中的数组循环的文件扩展名?【英文标题】:How to check file extension looping through an array in Angular? 【发布时间】:2021-06-23 15:13:08 【问题描述】:

测试数据组件.ts

export class TestDataManagementComponent 
requirement = [] as any;
testDataFileType = "doc,docx,xls,xlsx,pdf,application/msword,application/msexcel,application/pdf";
isNotAccepted = false;

submitForm() 
var splitted = this.testDataFileType.split(",");
let payload = new FormData();

for (let i = 0; i < this.requirement.length; i++) 
      payload.append('requirements', this.requirement[i]);
    

splitted.forEach(function (value) 
  for(let i = 0 ; i < this.requirement.length; i++) 
    if(this.requirement[i].name.split('.').pop() === value) 
      this.isNotAccepted = false;
      break;
     
    if(this.requirement[i].name.split('.').pop() !== value) 
      this.isNotAccepted = true;
      break;


);

错误类型错误:无法读取未定义的属性“要求”

请帮我弄清楚为什么没有定义“要求”,以及检查每个文件扩展名的最佳方法是一次循环遍历类型数组。

【问题讨论】:

【参考方案1】:

您遇到的问题与this 的引用有关。this 在 JS 中非常混乱,在编写代码时需要非常谨慎。 问题来了:

splitted.forEach(function (value) 
  for(let i = 0 ; i < this.requirement.length; i++) 
..... rest of the code 

您假设在类中,this 将引用对象/类。好吧,实际上并没有。 this 未定义为在您编写代码时引用包含它的对象。 相反,这是指whoever called the code in which it’s being used。 所以要么你需要明确地将this绑定到方法上,要么使用arrow函数(默认情况下有this的类引用)。

例如:

 splitted.forEach(value => 
      for (let i = 0; i < this.requirement.length; i++) 
        if (this.requirement[i].name.split(".").pop() === value) 
          this.isNotAccepted = false;
          break;
        
        if (this.requirement[i].name.split(".").pop() !== value) 
          this.isNotAccepted = true;
          break;
        
      
      
    ); 

这是一个很好的阅读:MDN : this 工作示例:Working example

【讨论】:

以上是关于如何检查通过Angular中的数组循环的文件扩展名?的主要内容,如果未能解决你的问题,请参考以下文章

在laravel-excel中循环遍历数组中的数组

Angular2,Typescript:如何在每页显示一个元素的数组中检查单选按钮?

如何在 ngFor 循环 [Angular] 中制作可扩展的表格行?

Angular JS权限检查

vue的数组如何存储数据

Angular 类中的数组数组