Javascript 如何停止array.filter()函数
我正在使用自定义搜索过滤器 HtMLJavascript 如何停止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) {
对函数进行去抖动。请参见下划线在此处的用法: 然后,您将生成一个函数的非公告版本,如下所示:
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
});
}