Javascript 如何基于具有角度的其他对象中的关键点过滤结果?
我有一个对象称为this.car,它看起来像这样,并显示在页面上:Javascript 如何基于具有角度的其他对象中的关键点过滤结果?,javascript,arrays,angular,filter,angular-ngselect,Javascript,Arrays,Angular,Filter,Angular Ngselect,我有一个对象称为this.car,它看起来像这样,并显示在页面上: this.car = { id: 1, title: "F40", make: ferrari, color: red, category: fast }; 然后,我有一个搜索汽车的搜索结果数组,这些搜索结果从一个端点返回,可能如下所示: let uri = `fast-cars/search?make=${make}&color=${color}&title=${tit
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
}
];
我可能在一个页面上显示有关上述汽车的信息。如果我通过用于搜索的可搜索自动完成下拉列表搜索汽车,我不希望上面的汽车对象显示在返回的列表中。但目前,标题仍显示在选项数组中
如果我的结果数组如下所示:
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
}
];
然后我想根据第一个对象中的值过滤结果,但我的过滤器不起作用。i、 e id:1应从下拉列表中删除
然后,我使用这种方法,在订阅结果时在其他地方像这样调用:
results => {
if (results) {
this.results = results;
this.filterSearchResults(this.results, this.car);
}
}
我不擅长在多个值上使用过滤器,因此在使其工作方面遇到了障碍。有人能看出我做错了什么吗 问题在您的条件逻辑中,修复如下。你需要
(result["color"] === car["color"] &&
result["make"] === car["make"] &&
result["title"] === car["title"])
不是
const car={
id:1,
标题:“F40”,
品牌:'法拉利',
颜色:“红色”,
类别:“快速”
};
常数结果=[
{
id:1,
标题:“F40”,
品牌:'法拉利',
颜色:“红色”,
类别:“快速”
},
{
id:2,
标题:“911”,
品牌:“保时捷”,
颜色:'黑色',
类别:“快速”
},
{
id:3,
标题:“聚焦”,
制作:'福特',
颜色:'黄色',
类别:“慢”
},
{
id:4,
标题:“T系列”,
做‘宾利’,
颜色:“灰色”,
类别:“快速”
}
];
console.log(results.filter(result=>
(结果[“颜色”]==汽车[“颜色”]&&
结果[“制造”]==汽车[“制造”]&&
结果[“标题”]==汽车[“标题”])
));代码>我想你只是想删除已经显示的汽车,所以这里有一个简单的过滤方法。现在结果包含正确的汽车。
car={
id:1,
标题:“F40”,
制造:“法拉利”,
颜色:“红色”,
类别:“快速”
};
结果=[
{
id:1,
标题:“F40”,
制造:“法拉利”,
颜色:“红色”,
类别:“快速”
},
{
id:2,
标题:“911”,
品牌:“保时捷”,
颜色:“黑色”,
类别:“快速”
},
{
id:3,
标题:“聚焦”,
制造:“福特”,
颜色:“黄色”,
类别:“慢”
},
{
id:4,
标题:“T系列”,
制造:“宾利”,
颜色:“灰色”,
类别:“快速”
}
];
this.results=this.results.filter(listedcar=>listedcar.id!==this.car.id);
console.log(this.results)
如果我正确理解了您的问题,您希望在this.results中过滤掉this.car
,并显示剩余的内容
filterSearchResults() {
var filteredList = this.results.filter(cars => cars.id !== this.car.id);
// or have another global object like this.filteredCars
console.log(filteredList);
};
由于this.car
和this.results
是全局对象,您可以在函数中直接使用它们,无需传递。如果汽车对象与数组中已存在的对象具有相同的属性(即标题、品牌和颜色),则这将从数组中删除对象:
this.results.filter(
e => e.title !== car.title && e.make !== car.make && e.color !== car.color
);
如果只想检查对象是否已存在,则可以使用some
,它将返回一个布尔值,指示元素是否存在:
return this.results.some(
e => e.title === car.title && e.make === car.make && e.color === car.color
);
它跳到我身上,就这样开始了!==是否要从数组中删除该对象?是,它将在条件前添加not检查,如!(…)
Hi here,也尝试了此选项,结果仍然返回需要删除的对象。@NicholasK-很自然,对于此作业中的大多数内容,筛选器需要删除具有一系列真正唯一值的对象,因此它不像通过id检查那么简单。:)我尝试了你在这里添加的第一个选项,顺便谢谢你。谢谢你的帮助。但是,当自动完成搜索同一对象时,结果仍然返回该对象。理论上,它不应该出现。你能粘贴你试图过滤掉的car
对象吗?我们可以聊天吗?因为我需要向你展示真实的对象,我的问题是广义的,以保护我正在处理的任何信息。如果这有意义的话?聊天真的存在了吗?是的。但我相信,如果你提供的信息与你目前面临的问题相同,那么答案对你来说是可行的。