【问题标题】:angular 2+ search function without pipe角度 2+ 搜索功能,无管道
【发布时间】:2018-04-12 20:31:33
【问题描述】:

我有 100 多个结果,我希望能够在没有管道的情况下进行搜索。不使用管道的原因是它大大降低了性能。 问题是 .indexOf 返回未定义的读取属性“indexOf” 错误

理想情况下,我想在打字时显示结果(即双向绑定?)

    
<th class="header7"><input type="text" placeholder="search" 
  [(ngModel)]="filterString" (keyup)="applyfilter()"></th>

<div class="arrayOfGrade"
  *ngFor="let key of arrayOfGradedCoins; let i = index">


this.arrayOfGradedCoins[i] = 
  {"_id":key._id, "item1": this.item1,"item2": this.item2}


applyfilter = () => {
  var results =[];

  for (var i = 0; i<this.arrayOfGradedCoins.length; i++) {
    for (let key in this.arrayOfGradedCoins[i]) {
      if (this.arrayOfGradedCoins[key].indexOf(this.filterString) != -1) {
        results.push(this.arrayOfGradedCoins[i]);
      }
    }
  }

  this.arrayOfGradedCoins = results;
}

【问题讨论】:

  • 您的this.arrayOfGradedCoins[key] 是一个对象,您正在调用indexOf(...)。您的意思是改用它的某个属性吗?
  • 啊好的我明白你在说什么,我试过没有 [key] 没有错误,但搜索时我的项目列表不显示。我喜欢专门搜索item1
  • 如果您提供有关 this.arrayOfGradedCoins 包含的内容以及您正在搜索的对象的具体内容的更多详细信息,我们可以为您提供有关如何更改 applyFilter() 方法的帮助。
  • this.arrayOfGradedCoins[i] = {"_id":key._id, "jaguar": this.item1,"wheels": this.item2} 这就是它所包含的,item1 将用于以汽车类型为例。因此,当我搜索 jaguar 时,它需要显示其中包含 jaguar 的 arrayOfGradedCoins 的迭代。所以我在一次迭代中只搜索 1 个属性。所以捷豹可能是 i=1 保时捷可能是 i=2。然后我会显示该特定迭代的详细信息。

标签: angular search input


【解决方案1】:

根据您在评论中的详细信息,我假设您要搜索 this.arrayOfGradedCoins[i] 中保存的对象中的键。与此类似的东西应该可以让您获得基于此的结果。

const results = this.arrayOfGradedCoins.filter(c => {
    const keys = Object.keys(c).filter(k => k !=== '_id');
    return keys.find(k => ~k.indexOf(this.filterString));
});

【讨论】:

  • 很抱歉,通过上面的尝试我发现它不起作用,但后来我也注意到我犯了一个错误。
  • 对不起,通过上面的尝试我发现我犯了一个错误,数组实际上是:this.arrayOfGradedCoins[i] = {"_id":key._id, "car": "Jaquar ","车轮": "米其林"} . const results = this.arrayOfGradedCoins.filter(c => { const keys = Object.keys(c).filter(k => k !== '_id'); Console.log (keys) 给我:["car" , "wheels"] 因此,如果我在搜索框中输入 jaguar,它应该会查看钥匙 car 并向我返回找到它的数组的索引。我不确定如何遍历 arrayOfGradedCoins 搜索钥匙汽车,然后找到值“美洲虎”
  • keys.find(k =&gt; ~k.indexOf(this.filterString)) 更改为keys.find(k =&gt; ~c[k].indexOf(this.filterString))
  • return keys.find(k => ~c[k].indexOf(this.filterString)) 给我错误我正在使用 Es6,也许这是不同的。我得到了一个错误按照附件图片。我的控制台出现错误:.当我添加 k => ~c[k].indexOf(this.filterString)) > 0 时,我摆脱了附加的错误消息并且它运行了,但是我得到了这个控制台错误:c[k].indexOf is not一个函数
  • 2ality.com/2013/12/array-prototype-find.html 答案可能就在这里,但我发现很难理解谓词的含义。谓词(元素、索引、数组)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-22
  • 1970-01-01
  • 2022-11-27
  • 2016-08-05
  • 1970-01-01
  • 2018-11-04
相关资源
最近更新 更多