如何从另一个数组中获取具有批准 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 输入字段的更新?