首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >高阶函数javascripts

高阶函数javascripts
EN

Stack Overflow用户
提问于 2015-07-01 19:10:58
回答 2查看 84关注 0票数 0

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

代码语言:javascript
复制
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参数调用每个()函数时,每个函数都会运行。当每个函数被调用时,它用arrayi调用isNumber函数,然后调用带有arrayi的isNumber函数,如果arrayi的类型是一个数字,它会将该数字*2推送到一个数组中。我期望的输出是

代码语言:javascript
复制
[2, 4, 6, 8] since "String" is not a number it never got pushed into the array.

我没有正确理解这一点吗?当我尝试记录这段代码时,没有显示输出。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-01 19:17:51

我想这对你有用:

代码语言:javascript
复制
// 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)); 
票数 2
EN

Stack Overflow用户

发布于 2015-07-01 19:14:42

没有显示输出,因为您的两个函数都没有返回任何内容。

在这里,我希望您的回调只需应用乘法并返回该值,然后推送到每个函数中的数组中。

代码语言:javascript
复制
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;
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31169722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档