JavaScript函数无法正常工作

时间:2015-02-11 02:25:14

标签: javascript higher-order-functions

我一直在处理一个问题,需要一些帮助!

我在下面创建了自己的每个功能:

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

希望这是有道理的!

2 个答案:

答案 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()函数使用传入的测试函数来检查集合的每个元素,但是它可以使用该结果来确定是否元素应该添加到结果中。