如何过滤数组并返回整个对象 - Angular

问题描述 投票:-1回答:3
export class ResultComponent {
    students: AdmissionFormData[]

    constructor(private adStudent: AdmissionFormService) {
        adStudent.adFormGet().subscribe(
            x => this.students = x
        )
    }

    onSubmit(value) {

    }
}

在学生数组中,我有数据。而onSubmit是函数,值是参数“roll”

和HTML文件:

<div class="form">
<div class="col-md-5 offset-md-3">
  <div class="card">
      <div class="card-header text-center">
          <h3 id="form_name" >Search Result</h3>
      </div>

      <div class="card-block">
          <form (ngSubmit)="onSubmit(f.value)" #f="ngForm" >
              <div class="form-group">
                <label for="">Roll</label>
                <input
                type="number" 
                ngModel
                name="reg" 
                #reg="ngModel" 
                [min]="99999"
                placeholder="Ex: 224697"
                class="form-control">
                <p class="text-danger" *ngIf="!reg.valid && reg.touched">Roll Should have at least 6 letter</p>
              </div>
              <input 
              type="submit"
              value="Search" 
              class="btn btn-block btn-outline-success">
          </form>
      </div>
  </div>

The array

我想在这个数组中搜索roll,如果我找到匹配,那么我想返回整个数组并在某处使用它。

现在我该怎么做?

我想我之前犯了一个错误所以我编辑了这个问题。请原谅我,我是新来的。

angular angular-arrays
3个回答
1
投票

您可以将array.filter与要过滤的属性一起使用,因为您没有提到该属性,假设它为fullname

this.students = this.students.filter(t=>t.fullname ===roll)[0];

或者如果您想要单个Object,请使用array.find

let studentObj =  this.students.find(t=>t.fullname ===roll);

0
投票

return this.students.filter(s => s.reg === value)

在这里,s是一个学生对象,你正在过滤其reg值与valueonSubmit(value)相匹配的对象。

这将返回具有指定reg值的对象数组。


0
投票
export class ResultComponent {
    students: AdmissionFormData[]

    constructor(private adStudent: AdmissionFormService) {
        adStudent.adFormGet().subscribe(
            x => this.students = x
        )
    }

    onSubmit(value):AdmissionFormData[] {
     return this.students.filter(student => student.reg === value)
    }
}

我在前两个对象上看到它们具有相同的注册号。如果只需要返回一个Object,则必须使用find,因为filter将返回所有匹配项。我还指定了返回类型,因为这是一种很好的做法。

onSubmit(value):AdmissionFormData[] {
   return this.students.find(student => student.reg === value)
}

UPDATE

我的代码适用于您要求的内容,过滤。我使用假数据创建了一个带有表单的stackblitz,我可以过滤数组。你们其中一个问题是我的代码无法正常工作是因为你传递的是一个Object而不是一个String,但我不知道这个因为你没有HTML。看看我的https://stackblitz.com/edit/angular-nt2ksu,看看我是如何处理的

© www.soinside.com 2019 - 2024. All rights reserved.