javascript - 将filter() 与includes() 一起使用的替代方法

标签 javascript typescript

我有两个对象,看起来或多或少像这样:

export const recipes: Recipe[] = [
  new Recipe( id: "Green", scenario: ["1", "2"]),
  new Recipe( id: "Blue", scenario: ["1", "2","2"])
];
export const scenarios: Scenario[] = [
  new Scenario( id: "1", ...),
  new Scenario( id: "2", ...)
];

在我的食谱模型中,我创建了一个函数来通过其 id: string 检索我的场景:

  getScenario(): Scenario[] {
    return scenarios.filter(scenario => this.scenario.includes(scenario.id));
  }

此函数过滤与 id: string 匹配的每个场景。

我的问题是,如果我的属性 scenario: string[] 多次包含相同的 id: string,它仍然会给我一个带有 的数组>["1", "2"] 而不是 ["1", "2","2"],这是我想要的结果。

最佳答案

您正在过滤场景,这意味着每个场景(1、2、3 等)都将被访问一次。您需要颠倒顺序并循环 this.scenario

因为您不能在此处使用过滤器,因为您实际上需要存储在 scenarios 中的场景,所以您的 getScenario() 函数应该是

getScenario(): Scenario[] {
    return this.scenario.map(scenarioValue => scenarios.find(s => s.id == scenarioValue));
  }

关于javascript - 将filter() 与includes() 一起使用的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58122885/

相关文章:

javascript - 每次按键时更改单词 javascript/jquery

javascript - Uncaught ReferenceError : makeDrink is not defined

typescript - 从局部变量设置枚举对象的初始成员值时出错

javascript - 如何在 Typescript 中声明给定大小的多维数组

javascript - 使用 ES6 模块的 TypeScript 的最佳方法是什么?

angular - 找不到外部模块 'angular2/http'

javascript - 双向链表可以在每个节点项上调用一个函数吗?

javascript - moment.js 获取昨天午夜到午夜的时间范围

javascript - TypeScript – Visual Studio Code – 编译后不输出 2 个空格选项卡

javascript - 使用 Snap.svg 为多边形中的点设置动画