我有一个名为 this.car 的对象,它看起来像这样并显示在页面上:
this.car = {
id: 1,
title: "F40",
make: ferrari,
color: red,
category: fast
};
然后,我有一系列寻找汽车的搜索结果,这些结果从可能如下所示的端点返回:
let uri = `fast-cars/search?make=${make}&color=${color}&title=${title}`;
我可能正在显示有关上述汽车的信息的页面。如果我通过用于搜索的可搜索自动完成下拉列表搜索汽车,我不希望上述汽车对象显示在返回的列表中。但目前,标题仍然显示在选项数组中。
如果我的结果数组如下所示:
this.results = [
{
id: 1,
title: "F40",
make: ferrari,
color: red,
category: fast
},
{
id: 2,
title: "911",
make: porsche,
color: black,
category: fast
},
{
id: 3,
title: "Focus",
make: ford,
color: yellow,
category: slow
},
{
id: 4,
title: "T-Series",
make: Bentley,
color: grey,
category: fast
}
];
然后我想根据第一个对象中的值过滤结果,但我的过滤器不起作用。即 id: 1 应从下拉列表中删除。
然后我使用这个方法,该方法在其他地方订阅结果时被这样调用:
results => {
if (results) {
this.results = results;
this.filterSearchResults(this.results, this.car);
}
}
我不太擅长对多个值使用过滤器,因此在使其正常工作方面遇到了障碍。谁能看到我做错了什么吗?
最佳答案
如果汽车对象与数组中已存在的对象具有相同的属性(即标题、品牌和颜色),则将从数组中删除对象:
this.results.filter(
e => e.title !== car.title && e.make !== car.make && e.color !== car.color
);
<小时/>
如果您只想检查对象是否已存在,则可以使用 some
它将返回一个 boolean 值,指示该元素是否存在:
return this.results.some(
e => e.title === car.title && e.make === car.make && e.color === car.color
);
关于javascript - 如何使用 Angular 根据其他对象中的键过滤结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61121865/