Arrays 如何从另一个阵列获取具有已批准ID的项目?map()过滤器()还是?

Arrays 如何从另一个阵列获取具有已批准ID的项目?map()过滤器()还是?,arrays,angular,typescript,dictionary,filter,Arrays,Angular,Typescript,Dictionary,Filter,嗨,我不知道如何仅获取此项(包含对象的数组) 哪一个已经批准了身份证?基本上,我不知道先做什么map()然后filter()或filter()他们map() 您可以使用过滤器() 试着这样做: public getApprovedItems(): any[] { return this.items.filter(x => this.approvedId.includes(x.id)) } 希望此解决方案适用于您: public getApprovedItems(): any {

嗨,我不知道如何仅获取此项(包含对象的数组) 哪一个已经批准了身份证?基本上,我不知道先做什么
map()
然后
filter()
filter()
他们
map()

您可以使用过滤器()

试着这样做:

public getApprovedItems(): any[] {
  return this.items.filter(x => this.approvedId.includes(x.id))
}

希望此解决方案适用于您:

public getApprovedItems(): any {
    this.items.map((singleObject) => {
        if(this.approvedId.includes(singleObject.id)){
            console.log(singleObject);
            //{id: 535345, code: "432gdh4356"}
           // {id: 978767, code: "eaw32134dd"}
        }

    });
尝试使用筛选器:

 items = [
    { id: 535345, code: '432gdh4356' },
    { id: 634586, code: 'irdtry4567' },
    { id: 124315, code: 'fgdt43104f' },
    { id: 978767, code: 'eaw32134dd' }
  ];

 approvedId = [ 535345, 978767 ];

public getApprovedItems(): any {
  return this.items.filter(item => this.approvedId.includes(item.id))
}

请考虑使用函数的结果进行打字。

export interface Code {
  id: number;
  code: string;
}

export class AppComponent  {
  name = 'Angular';
  items: Code[] = [
    { id: 535345, code: '432gdh4356' },
    { id: 634586, code: 'irdtry4567' },
    { id: 124315, code: 'fgdt43104f' },
    { id: 978767, code: 'eaw32134dd' }
  ];
  approvedItems: Code[];

  approvedId: number[] = [ 535345, 978767 ];

  ngOnInit() {
    this.approvedItems = this.getApprovedItems();
  }

  public getApprovedItems(): Code[] {
    return this.items.filter((x: Code) => this.approvedId.includes(x.id);
  }
}

我想我们都可以试着在回答问题时多一些教育。使用过滤器的答案肯定是好的,并且是有效的。但它为什么会起作用呢?为什么OP会考虑使用map()

以下是我的答案:

您根本不必使用
map()
。您可能知道,
.map()
方法将函数应用于列表中的所有项。认为在每个项目上映射(应用)过滤器函数是有意义的。的确如此!只是,这正是
.filter()
方法所做的
.filter()
的工作原理与
.map()
完全相同,因为它将函数应用于数组中的每个元素。但是,
.filter()
需要一个返回布尔值(true/false)的函数。如果函数返回值为true,则
。filter()
会将其添加到返回数组中,否则如果为false,则不会将其添加到返回数组中。这就是为什么在这种情况下我们只需要使用
.filter()

一些代码深受MoxxiManagarm答案的启发(主要是添加注释):


请不要退货。至少表明它是一个数组,它只是一个输出,你为什么还要用map呢?我不明白你的意思。你能详细解释一下吗。投票失败的原因是什么?你的地图没有映射任何东西通过地图,我可以得到特定的物体,我可以在上面检查条件。因此,我使用了映射。您也可以通过其他操作(如foreach和filter)获得这个特定项。我想说的是,你们使用地图的方式完全错误。您的函数可能会将正确的值打印到控制台,但不会返回它们。这不是您使用地图的方式。请不要返回任何地图。至少表明这是一个数组请允许我提及,您的
getApprovedItems
结果未被使用。
export interface Code {
  id: number;
  code: string;
}

export class AppComponent  {
  name = 'Angular';
  items: Code[] = [
    { id: 535345, code: '432gdh4356' },
    { id: 634586, code: 'irdtry4567' },
    { id: 124315, code: 'fgdt43104f' },
    { id: 978767, code: 'eaw32134dd' }
  ];
  approvedItems: Code[];

  approvedId: number[] = [ 535345, 978767 ];

  ngOnInit() {
    this.approvedItems = this.getApprovedItems();
  }

  public getApprovedItems(): Code[] {
    return this.items.filter((x: Code) => this.approvedId.includes(x.id);
  }
}
export interface Code {
  id: number;
  code: string;
}

export class AppComponent  {
  name = 'Angular';
  items: Code[] = [
    { id: 535345, code: '432gdh4356' },
    { id: 634586, code: 'irdtry4567' },
    { id: 124315, code: 'fgdt43104f' },
    { id: 978767, code: 'eaw32134dd' }
  ];
  approvedItems: Code[];

  approvedId: number[] = [ 535345, 978767 ];

  ngOnInit() {
    this.approvedItems = this.getApprovedItems();
  }


  public getApprovedItems(): Code[] {
    // (item: Code) => this.approvedId.includes(item.id) will return true if
    // the item's id is included in the approvedId array and therefore add it
    // to the returning array
    return this.items.filter((item: Code) => this.approvedId.includes(item.id));
  }
}