Javascript 如何停止array.filter()函数

Javascript 如何停止array.filter()函数,javascript,arrays,angular,typescript,Javascript,Arrays,Angular,Typescript,我正在使用自定义搜索过滤器 HtML 对函数进行去抖动。请参见下划线在此处的用法: 然后,您将生成一个函数的非公告版本,如下所示: var globalSearchDebounced = _.debounce(globalSearch, 100, false); 只有在用户停止键入至少一秒钟后,它才会调用。无法中断数组.filter方法。根据您的需要,您可以这样处理: let timerId = null function handleChange() { if(timerId) {

我正在使用自定义搜索过滤器

HtML


对函数进行去抖动。请参见下划线在此处的用法:

然后,您将生成一个函数的非公告版本,如下所示:

var globalSearchDebounced = _.debounce(globalSearch, 100, false);

只有在用户停止键入至少一秒钟后,它才会调用。

无法中断
数组.filter
方法。根据您的需要,您可以这样处理:

let timerId = null

function handleChange() {
  if(timerId) {
    clearTimeout(timerId)
  }

  timerId = setTimeout(() => /* Array.filter(...) */, 1000)
}
解释

具有一个变量,该变量将包含从
setTimeout
函数返回的
timerId
。每次更改模型时,都会调用
handleChange
函数(在本例中)。该函数检查包含
timerId
的变量是否已设置并包含
timerId
,当该变量包含
timerId
时,将调用
clearTimeout
函数以清除前一个超时,然后handleChange创建新超时并分配
timerId
(从
setTimeout
函数返回)到变量

  • 文件
  • 文件

    • 没有下划线,也没有超时(顺便说一句,这将触发整个角度生命周期),您可以使用带有异步管道和去盎司的可观测数据

      在全局搜索功能中:

      return Observable.of(/* filter here and return the filtered array */).debounceTime(1000)
      
      在您的列表中(我想一定是在某个地方)

      。。。
      
      我已经使用
      主题
      去BounceTime
      完成了它

      private subject = new Subject<string>()
      ngOnInit() {
              this.subject.debounceTime(300).subscribe(inputText => {
              this.gloablFilterValue = inputText;
              this.splitCustomFilter();   // filter method  
              });    
          }
      
      private subject=new subject()
      恩戈尼尼特(){
      this.subject.debounceTime(300).subscribe(inputText=>{
      this.gloablFilterValue=输入文本;
      this.splitCustomFilter();//filter方法
      });    
      }
      

      现在,当我使用change event更改
      这个.gloablFilterValue
      对象中的值时,它只是等待事件完成的结束。

      在完成之前,你不能停止
      过滤器。另一方面,你可以使用
      for
      循环,你可以
      中断
      。其他可能性:你需要停止事件。所以看在反Bounce时,如果已过滤,则当他们键入一个或多个字符时,无需过滤整个列表,只需过滤过滤集。当然,反Bounce,但除此之外,您可能还可以进一步优化代码。例如,您可以(假设文本是静态的)在初始化每行所有单元格的过程中创建一个连接字符串。然后只检查每行连接的字符串。这样,您就可以跳过过滤器中所有列+strtolower的循环。尝试看看此解决方案的另一种替代方法是使窗体成为被动的,订阅输入值的更改,然后应用rxjs去Bounce运算符。还可以添加其他运算符,如filter,以在执行数组筛选器之前强制执行最小字符数。您不能“仅复制14行”。当您使用部分代码时,仍然有一个许可证,其中包含必须遵守的条款。@IngoBürk是正确的。冒犯的句子被删除。错误;对于“Observable”
      import“rxjs/add/Observable/of”;
      导入“rxjs/Rx”;
      (这是一种不好的做法,但它将允许您测试它是否能按您的需要工作)
      <list-item *ngFor="let x of myFilteredResults | async">...</list-item>
      
      private subject = new Subject<string>()
      ngOnInit() {
              this.subject.debounceTime(300).subscribe(inputText => {
              this.gloablFilterValue = inputText;
              this.splitCustomFilter();   // filter method  
              });    
          }