在Typescript中过滤数组

时间:2018-05-21 18:18:03

标签: javascript angular typescript

问题:
 如何根据其ID显示我的下拉列表中的预选项目。

说明/问题:
我的下拉选项来自动态Web服务,该服务根据用户ZipCode查找提供者。提供商的一个例子是{电话:" 5093240817",sp_id:" 1",姓名:" John Doe" ...} ...下拉列表显示要选择的用户的名称,但我们只存储ID。所以我面临的问题是,如果用户返回更改其提供者,我想显示用户原始的提供者名称,但我只有ID。

旁注:我们无法存储Name的值,因为Web服务可以更改提供者名称值。

我的尝试:
我解决这个问题的想法是过滤"过滤"基于原始ID的Providers数组,然后找到那个名字。我是Angular和打字稿的新手,所以我遇到了麻烦......



我的想法。
 我正在阅读另一篇SO帖子并试图了解他们是如何做到的,但我又一次遇到了麻烦。 (How do I filter an array with TypeScript in Angular 2?

    const showValue = this.serviceProvider.filter(sp_id => 
    this.selectedAppointment.sp_id)

** this.selectedAppointment.sp_id保留原始ID值。


服务提供商选项

{电话:" 5093240817",sp_id:" 1",经度:-77.3841197,提供者类型:"儿科",纬度:38.9808589,姓名:" John Doe" ...} 1个

{电话:" 097420454",sp_id:" 3",经度:-77.3898602,提供者类型:"儿科",纬度:38.914697200000006,姓名:& #34;金" ...} 2个

2 个答案:

答案 0 :(得分:1)

在您的示例中,sp_id是传递给filter回调的每次迭代的服务提供者选项。我想您可能会误解箭头功能的工作方式:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions

另外,请查看filter方法:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

我认为您要做的是(将该选项的sp_id与所选值进行比较):

 this.serviceProvider.filter(sp => sp.sp_id === this.selectedAppointment.sp_id);

或者,为了提供一些清晰度:

this.serviceProvider.filter((serviceProvider) => {
    return serviceProvider.sp_id === this.selectedAppointment.sp_id;
}

答案 1 :(得分:0)

通过迭代选项然后在表单中设置匹配值来结束解决此问题!

  setProvider(sp_id) {
    for(let sp in this.serviceProvider) {
      if (sp_id == this.serviceProvider[sp].sp_id) {
        (<FormGroup>this.patientAppointmentForm)
          .patchValue({serviceProvider: 
this.serviceProvider[sp].sp_id}, {onlySelf: true});
      }
    }
  }