高阶函数javascript

higher order function javascripts

我正在尝试更好地理解并开始使用高阶函数编写 JS。下面只是我在做的一个练习,我想输出一个数字数组 * 2.

function each(collection, callback) {
  for(var i = 0; i < collection.length; i++) {
    callback(collection[i]);
    }
}

function isNumber(item) {

  var arr = [];
    if(typeof item === "number") {
      arr.push(item * 2);
    }

  return arr;
}

each([1, 2, 3, 4, "String"], isNumber);

根据我的理解,当使用数组和 isNumber 参数调用 each() 函数时,它会遍历 each 函数。当每个函数被调用时,它用数组[i]回调isNumber函数,然后调用那个数组[i]的isNumber函数,如果数组[i]的类型是一个数字,它把那个数字* 2推到一个大批。我期待的输出是

[2, 4, 6, 8] since "String" is not a number it never got pushed into the array.

我是不是理解错了?当我尝试记录此代码时,没有输出显示。

没有输出显示,因为你的函数 return 什么都没有。

在这里,我会让你的回调只应用乘法和return那个值,然后推送到你的每个函数中的一个数组

function each(collection, callback) {
  var arr = [];
  for(var i = 0; i < collection.length; i++) {
      var result = callback(collection[i])
      if (typeof result !== 'undefined') {
        arr.push(callback(collection[i]));
      }
    }
  return arr
}

function isNumber(item) {
    if (typeof item === "number") {
      return item * 2;
    }
}

我认为这对你有用:

// Let's call this what it is
function getNumbersFromArray(collection, callback) {
    var arr = [],
        i = 0;

    for (; i < collection.length; i++) {
        // Check if isNumber and do mutliplication here
        if (callback(collection[i])) {
            arr.push(item * 2);
        }
    }

    return arr;
}

// Make isNumber actually return a boolean
function isNumber(item) {
    return typeof item === "number";
}

// call console.log()
console.log(getNumbersFromArray([1, 2, 3, 4, "String"], isNumber));