所以基本上我需要使用我在filter函数中实现的每个函数,这样过滤器函数只返回myArray中大于2的项。我完全卡住了。
var myArray = [1, 2, 3, 4, 5];
function each(collection, callback) {
for (var i = 0; i < collection.length; i++) {
callback(collection[i]);
}
}
function filter(collection, test) {
var returnAr = [];
for (var i = 0; i < collection.length; i++) {
if (test(collection[i])) {
returnAr.push(collection[i])
}
}
//instead of using "for(var i = 0; i < collection.length; i++)"
// how can i use the each function i implemented above?
return returnAr;
}
filter(myArray, function(n) {
return n > 2;
}
答案 0 :(得分:0)
你不能。每个&#39;上面的函数对集合的所有项执行回调。但是在&#39;过滤器&#39;您是根据回调的结果决定是否需要结果数组中的项目。所以&#39;过滤&#39;和&#39;每个&#39;都是不同的行动。无论你在当前函数中做什么都是正确的过滤方式。
答案 1 :(得分:0)
each
的签名采用类似于数组的数组,以及使用该元素调用的函数。
function each(collection, callback) {
for (var i = 0; i < collection.length; i++) {
callback(collection[i]);
}
}
看起来你的回调应该只是这样做:
if (test(collection[i])) {
returnAr.push(collection[i])
}
请注意,collection [i]是回调的第一个参数。
您的回调信息将采用以下格式:
function(element) {
// do stuff
}
答案 2 :(得分:0)
如果你真的只想在你提供的条件下过滤数组,这就是你需要的所有代码:
myArray.filter(function(item) { return item > 2 })
答案 3 :(得分:0)
each
函数通过将数组中的每个项作为函数参数传递来调用其回调。因此,调用它的正确方法是:
each(collection, function(item) {
if (test(item)) {
// ...
}
}
Javascript并没有提供一种很好的自我记录方式来指定函数签名[1]。通常,这可以通过阅读API文档来解决。但是,如果这是您自己的代码并且它没有API文档,那么您需要查看如何调用回调。在这种情况下,它被称为:
callback(collection[i]);
它告诉我们回调函数应该接受一个参数,该参数是数组中的单个项目。
[1]:也称为原型,不,不是在javascript意义上的“原型”这个词,在C语言中的意思是“原型”