如何从另一个数组中获取具有批准 ID 的项目?地图()过滤器()还是?

Posted

技术标签:

【中文标题】如何从另一个数组中获取具有批准 ID 的项目?地图()过滤器()还是?【英文标题】:How to get items with approved ids from another array? map() filter() or? 【发布时间】:2020-01-01 07:32:52 【问题描述】:

您好,我不知道如何仅获取这些项目(带有对象的数组) 哪些已经批准的id?基本上,我不知道先做什么...map() 然后filter()filter() 他们map()?

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

  approvedId = [ 535345, 978767 ];

  ngOnInit() 
    this.getApprovedItems();
  

  public getApprovedItems(): any 
    // result:
    // [ id: 535345, code: '432gdh4356' ,  id: 978767, code: 'eaw32134dd' ]
  

【问题讨论】:

请让我提一下,您的getApprovedItems 的结果未被使用。 【参考方案1】:

尝试使用过滤器:

 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))

【讨论】:

请不要退货。至少表明它是一个Array【参考方案2】:

你可以使用 filter()

试试这样:

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

【讨论】:

请不要退货。至少表明它是一个Array【参考方案3】:

请考虑使用函数的结果键入 und。

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);
  

【讨论】:

【参考方案4】:

我认为我们都可以尝试在我们的答案中更具教育意义。过滤器的答案绝对是好的并且正在工作。但它为什么有效?为什么 OP 会考虑使用 map()?

这是我的答案:

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

受 MoxxiManagarm 的回答启发很大的一些代码(主要是添加 cmets):

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));
  


【讨论】:

【参考方案5】:

希望此解决方案对您有用:

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

    );

【讨论】:

它只是一个输出,你为什么还要使用地图? 我没听懂你。你能详细解释一下吗。 downVote 背后的原因是什么? ou map 没有映射任何东西 通过地图,我可以得到特定的对象,我可以检查它的条件。因此我使用了地图。 您也可以通过其他操作(如 foreach 和 filter)获得这个特定项目。我的观点是您以完全错误的方式使用地图。您的函数可能会将正确的值打印到控制台,但不会返回它们。这不是你使用地图的方式。

以上是关于如何从另一个数组中获取具有批准 ID 的项目?地图()过滤器()还是?的主要内容,如果未能解决你的问题,请参考以下文章

从 MongoDB 文档中获取 ID,然后从另一个文档中获取它们的相关值

我如何传递从另一个模型获取的角色数组以在 laravel 中注册表单

如何从另一个活动中编辑和获取 editText 输入字段的更新?

复合地图:从另一个地图中获取数据

如何从另一个数组中的数组中获取数据,该数组在 Java 中存储值?

从另一个 terraform 项目获取 VPC id