Javascript 解释Typeahead.js substringMatcher函数
我正在研究Javascript 解释Typeahead.js substringMatcher函数,javascript,typeahead.js,Javascript,Typeahead.js,我正在研究Typeahead.js,它是一个非常酷的库。由于文档非常好,我成功地获得了一个基本的示例 然而,我试图弄清楚下面这段代码实际上在做什么 var substringMatcher = function(strs) { return function findMatches(q, cb) { var matches, substringRegex; // an array that will be populated with substring matches
Typeahead.js
,它是一个非常酷的库。由于文档非常好,我成功地获得了一个基本的示例
然而,我试图弄清楚下面这段代码实际上在做什么
var substringMatcher = function(strs) {
return function findMatches(q, cb) {
var matches, substringRegex;
// an array that will be populated with substring matches
matches = [];
// regex used to determine if a string contains the substring `q`
substrRegex = new RegExp(q, 'i');
// iterate through the pool of strings and for any string that
// contains the substring `q`, add it to the `matches` array
$.each(strs, function(i, str) {
if (substrRegex.test(str)) {
matches.push(str);
}
});
cb(matches);
};
};
在本例中,它是在初始化typeahead作为
源
选项时传入的。我可以理解,它从文本框中获取输入并将其与数据集进行比较,但我有点困惑q
和cb
是什么?q
是要搜索的值。这被传递到正则表达式匹配器,搜索不区分大小写(“i”参数)
cb
是一个回调函数,返回从搜索中找到的匹配项
findMatches
基本上是一个匿名函数,用作substringMatcher
函数的实现。好的,这很有意义,在本例中,作者使用匿名函数有什么原因吗?看起来这有点像一种咖喱,其中strs是闭包中的字符串列表。基本上是一个方便的方式过滤STR的库克很感谢你的帮助,使事情更清楚!我讨厌不理解每一行都在做什么。问题在于,如果传入对象(strs)在typeahead对象初始化后发生更改,那么这些更改对substringMatcher不可见,因为它是在初始化过程中复制的。有人知道如何重新初始化typeahead对象吗?我通过在findMatches函数中使用全局对象的名称来解决这个问题,但是如果您有多个typeahead输入字段,那么您需要为每个字段使用一个自定义的子字符串匹配器。