Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何基于具有角度的其他对象中的关键点过滤结果?_Javascript_Arrays_Angular_Filter_Angular Ngselect - Fatal编程技术网

Javascript 如何基于具有角度的其他对象中的关键点过滤结果?

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,它看起来像这样,并显示在页面上:

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
对象吗?我们可以聊天吗?因为我需要向你展示真实的对象,我的问题是广义的,以保护我正在处理的任何信息。如果这有意义的话?聊天真的存在了吗?是的。但我相信,如果你提供的信息与你目前面临的问题相同,那么答案对你来说是可行的。