我想将数组中的每个字符串与给定的字符串进行比较。我当前的实现是:
function startsWith(element) {
return element.indexOf(wordToCompare) === 0;
}
addressBook.filter(startsWith);
这个简单的函数有效,但是仅因为现在将wordToCompare设置为全局变量,但是我当然想避免这样做并将其作为参数传递。我的问题是我不确定如何定义startsWith(),因此它不能接受一个额外的参数,因为我真的不了解如何传递其默认参数。我尝试了所有可以想到的不同方式,但都无济于事。
如果您还可以解释将参数传递给“内置”回调函数的方法(对不起,我不知道这些更好的术语)会很好
使startsWith
接受单词进行比较并返回一个函数,该函数将随后用作过滤器/回调函数:
function startsWith(wordToCompare) {
return function(element) {
return element.indexOf(wordToCompare) === 0;
}
}
addressBook.filter(startsWith(wordToCompare));
另一种选择是使用Function.prototype.bind
[MDN](仅在支持ECMAScript 5的浏览器中可用,请为较旧的浏览器使用填充程序链接)并“修复”第一个参数:
function startsWith(wordToCompare, element) {
return element.indexOf(wordToCompare) === 0;
}
addressBook.filter(startsWith.bind(this, wordToCompare));
我真的不明白如何传递默认参数
没什么特别的。在某个时候,filter
只需调用回调并传递数组的当前元素即可。因此,这是一个调用另一个函数的函数,在这种情况下,您将作为参数传递的回调。
这是一个类似函数的示例:
function filter(array, callback) {
var result = [];
for(var i = 0, l = array.length; i < l; i++) {
if(callback(array[i])) { // here callback is called with the current element
result.push(array[i]);
}
}
return result;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句