代码之家  ›  专栏  ›  技术社区  ›  JumpIntoTheWater

函数返回不需要的数据

  •  0
  • JumpIntoTheWater  · 技术社区  · 6 年前

    我有一个包含一些跑步者数据的JSON文件。 我尝试使用以下方法筛选一些数据:

    performFilterByRunnerName(filterBy: string):IRunners[]{
        return this.runners.filter(x=>x.runnerName=filterBy);
    }
    

    HTML的一部分是:

    <input #filterinputrunner id="runnerFilter" type="text" 
      (change) = "performFilterByRunnerName(filterinputrunner.value)"
      [ngModel]='listRunnerFilter'>
    

    我有一份清单 IRunner 保存运行者数据的类型(接口)。 当改变 input 价值观,发生的是 runnerName 所有的字段更改 runners 而不是用输入值过滤跑步者。 我做错什么了?

    4 回复  |  直到 6 年前
        1
  •  2
  •   Antoniossss    6 年前
    (x=>x.runnerName=filterBy)
    

    你想 比较 分配

    (x=>x.runnerName==filterBy)
    

    应该是正确的。投票结束。

        2
  •  1
  •   ovidiup    6 年前

    您的筛选条件似乎不正确。您正在分配( = ) filterBy 为您的每个跑步者设置属性。

    你想要的是一个平等的条件( === )

    return this.runners.filter(x => x.runnerName === filterBy);

        3
  •  1
  •   user3392782    6 年前

    突出显示的这一行代码分配的值不是比较它。

    返回此.runners.filter(x=> x.runnername=筛选依据 )

    您需要进行如下比较:

    return this.runners.filter(x=>**x.runnerName === filterBy**) 
    
        4
  •  1
  •   SiddAjmera    6 年前

    如果你在用 change 它不会在键入时更新筛选结果,只会在 blur . 如果希望在键入时更新列表,则应考虑使用 keyup .

    (keyup) = "performFilterByRunnerName(filterinputrunner.value)"

    另外,基于结果中包含的筛选搜索而不是精确的字符串搜索进行筛选。这将产生更好的搜索结果:

    onFilterChange(filterBy) {
      this.filteredUsers = [...this.users.filter(user => user.name.indexOf(filterBy) > -1)];
    }
    

    这里有一个 Sample StackBlitz 为了你的食物。

    推荐文章