首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSFiddle &回调

JSFiddle &回调
EN

Stack Overflow用户
提问于 2016-02-26 05:19:15
回答 2查看 146关注 0票数 0

作为努力的一部分,我正在重写下划线函数,并在jsfiddle中测试它们。每次传递回调函数时,我都会得到“未定义”。

我的代码如下:

代码语言:javascript
复制
each = function(collection, iterator) {
if(Array.isArray(collection)){
  for (var i = 0; i < collection.length; i++) {
    iterator(collection[i], i, collection);
  }
} else {
  for(var key in collection) {
    iterator(collection[key], key, collection);
  }
}
};

var numbers = [1,2,3,4];

var result = each(numbers, function(num) {
 return num * 2;
});

 console.log(result);
// undefined

你知道我做错了什么吗?为什么它不放小提琴?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-26 05:45:31

你没做错什么。您的each函数没有返回任何内容。这很好,因为each函数不一定要返回任何内容。您可能会按照mapreduce函数的思路进行思考,后者编译对集合中的每个项调用回调的结果,然后返回该编译。

传递给each函数的回调通常不会返回任何内容。将each看作是普通for循环的语法糖;for循环不返回任何内容(显然.),它们只对集合中的项和包含范围中声明的变量执行泛型操作。

尽管如此,如果您想要模拟下划线(或任何好的库),您将希望返回集合以启用链接。来自下划线文档

每个元素在一个元素列表上迭代,依次生成一个迭代器( iteratee function....Returns )用于链接的列表。

这只是一个很好的实践,这样可以避免困扰那些可能使用您的库并习惯于在JavaScript中链接所有东西的开发人员。

所以你要做的就是

代码语言:javascript
复制
return collection;

在你的each函数的末尾,你很好。干杯。

票数 0
EN

Stack Overflow用户

发布于 2016-02-26 05:27:43

您没有聚合操作的结果,这就是结果不是结果的原因。

下面是如何为数组修复这个问题的快速尝试。

代码语言:javascript
复制
each = function(collection, iterator) {
    var arr = [];
    if(Array.isArray(collection)){
    for (var i = 0; i < collection.length; i++) {
        arr.push( iterator(collection[i], i, collection) );
    }
    return arr;
    } else {
    for(var key in collection) {
      iterator(collection[key], key, collection);
    }
    }
};

var numbers = [1,2,3,4];

var result = each(numbers, function(num) {
 return num * 2;
});

 console.log(result);

小提琴

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35644040

复制
相关文章

相似问题

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