我一直在处理一个问题,需要一些帮助!
我在下面创建了自己的每个功能:
var myArray = [1,2,3,4,5]; // this will be running through the collection parameter
var each = function (collection, callback) {
if (Array.isArray(collection)) {
for (i=0; i<collection.length; i++) {
callback(collection[i]);
};
} else {
for (var property in collection){
callback(collection[property]);
}
}
};
我还在下面创建了自己的过滤功能:
var filter = function(collection, predicate) {
var newArray= [];
if (each(collection, predicate)) {
newArray.push(collection[property]);
};
return newArray;
};
var test = function (item) {
return item > 2;
}; // this will be running through the predicate parameter
filter(myArray, test);
我正在尝试做的,不改变每个函数或测试函数,只有过滤函数,是利用过滤函数中的每个函数。要返回的最后一行代码是myArray的每个元素,它们在谓词参数下最终都是真的 - 在本例中是测试函数。所以,结果应该是[3,4,5]。但是,我一直在让阵列打印出来。我知道错误在哪里 - 我相信它就在这里:
if (each(collection, predicate))
这行代码尝试做的是使用每个函数,使用谓词函数迭代集合中的每个项目,如果该特定项目在谓词下计算为true,则以下行将元素推送到newArray
希望这是有道理的!
答案 0 :(得分:0)
你会想做这样的事情:
var filter = function(collection, predicate) {
var array = [];
each(collection, function(item) {
if(predicate(item))
array.push(item);
});
return array;
};
每个元素的第二个元素是回调
答案 1 :(得分:0)
你的filter
函数需要将谓词包装在一个单独的函数中,以便它可以构建它的返回值:
var filter = function(collection, predicate) {
var newArray= [];
each(collection, function(element) {
if (predicate(element)) newArray.push(element);
});
return newArray;
};
现在你的回调传递到你的each()
函数使用传入的测试函数来检查集合的每个元素,但是它可以使用该结果来确定是否元素应该添加到结果中。