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>
我想在这个数组中搜索roll,如果我找到匹配,那么我想返回整个数组并在某处使用它。
现在我该怎么做?
我想我之前犯了一个错误所以我编辑了这个问题。请原谅我,我是新来的。
您可以将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);
return this.students.filter(s => s.reg === value)
在这里,s
是一个学生对象,你正在过滤其reg值与value
的onSubmit(value)
相匹配的对象。
这将返回具有指定reg值的对象数组。
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,看看我是如何处理的