JavaScript 功能未按预期运行

JavaScript function not working as intended

我一直在解决一个问题,需要一些帮助!

我在下面创建了自己的每个函数:

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);

我想做的是,在不更改每个函数或测试函数且仅更改过滤器函数的情况下,利用过滤器函数中的每个函数。最后一行代码的目的是 return,是 myArray 的每个元素在谓词参数下最终为真 - 在本例中为测试函数。所以,结果应该是 [3,4,5]。但是,我只是让数组打印为空。我知道错误在哪里 - 我相信它在这里:

if (each(collection, predicate))

这行代码试图做的是使用 each 函数,使用 predicate 函数遍历集合中的每个项目,如果该特定项目在 predicate 下的计算结果为真,则下一行将推送元素进入 newArray.

希望这是有道理的!

你会想做这样的事情:

var filter = function(collection, predicate) {
  var array = [];
  each(collection, function(item) {
    if(predicate(item))
      array.push(item);
  });
  return array;
};

每个的第二个元素是回调

您的 filter 函数需要将谓词包装在一个单独的函数中,以便它可以构建其 return 值:

var filter = function(collection, predicate) {
  var newArray= [];
  each(collection, function(element) {
    if (predicate(element)) newArray.push(element);
  });
  return newArray;
};

现在 您的 回调传递给您的 each() 函数使用传入的测试函数来检查集合中的每个元素,但它随后可以使用该结果来确定是否应将元素添加到结果中。