javascript - 如何使用 Angular 根据其他对象中的键过滤结果?

标签 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=${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/

相关文章:

javascript - 在javascript对象的某个位置插入键值对

javascript - 如何自动打开显示/隐藏 javascript 选项卡并在第二次单击时重新隐藏

javascript - 是否可以在 *ngFor 中增加组件属性值?

java - Java中将2n个数组分成n组

Python 在 C 中生成的字符串

css - 如何应用条件CSS?

Angular 7 : ng test hangs , 不断重复运行测试

php - 用于在网站上实时编辑 doc/xls 的脚本/类

javascript - 这是一个无限循环,但我终究无法弄清楚为什么

java - 找到两个数组中的值