我正在创建自己的回调函数和更高阶函数组.我坚持复制下划线缩减功能或._reduce函数.有人可以帮助我理解它是如何在引擎盖下工作的,对我来说已经有几天了,我很难过.这是我到目前为止所拥有的.请理解我没有使用下划线库,我试图复制它,以便我可以进一步理解更高阶函数.谢谢.
var reduce = function(collection,iterator,accumulator) {

    var iterator = function(startPoint,combiner){
      for(var i = 0; i <combiner.length; i++){
        startPoint += combiner[i];
    }
    return iterator(accumulator,collection);
}

解决方法

在这些答案的评论中,Underscore的reduce和Array.prototype.reduce之间存在很多混淆.两个说明:

> Underscore的reduce允许空集合,没有种子值.在这种情况下,它不会抛出错误,而是返回undefined. naomik让我确信这不安全.例如_([]).reduce(function(a,b){return a b});应该抛出错误或返回一个空列表.
> Underscore的reduce适用于对象和数组.

现在,到我原来的帖子:

我实际上做了同样的事情 – 从头开始​​实施Underscore的关键功能 – 一段时间后,reduce可能是最棘手的.我认为使用非功能性减少更容易降低(为此信用为naomik):

function reduce(arr,func,seed) {
    var result = seed,len = arr.length,i = 0;
    for (; i < len; i++) {
        result = func(result,arr[i])
     }
     return result
 }

Underscore的实现有点复杂,处理对象和数组,空集合和可选的种子值.它还使用每个而不是for循环,因为它在样式上更具功能性.这是我对Underscore减少的实现:

var reduce = function(coll,seed) {
    // `isEmpty` (not shown) handles empty arrays,strings,and objects.
    // Underscore accepts an optional seed value and does not 
    // throw an error if given an empty collection and no seed.
    if (isEmpty(coll)) {
        return coll;
    }
    var noSeed = arguments.length < 3;

    // `each` (not shown) should treat arrays and objects
    // in the same way.
    each(coll,function(item,i) {
        if (noSeed) {
            // This condition passes at most once. If it passes,// this means the user did not provide a seed value.
            // Default to the first item in the list.
            noSeed = false;
            seed = item;
        } else {
            seed = func(seed,item,i);
        }
    });

    return seed;
};

javascript – 从头开始​​创建下划线缩减功能的更多相关文章

  1. ios – 在Swift中_:_:和冒号和下划线的类似组合是什么意思?

    那就是下划线的来源.我们可以将函数重写为:注意第一个参数不需要_,但后续的参数将是.第一个被推断为没有参数名称.这使得此调用的方法签名为sayHello,因为您作为调用者没有命名参数.更新Swift3.0:Swift3.0平等对待所有参数.第一个参数现在需要一个下划线来表示外部参数名称的缺失.在上面的示例中,在调用站点上有sayHello,您的相应函数或方法声明必须是请注意在内部参数名称“person”之前添加下划线.

  2. Swift 控制流(四)

    ControlFlow控制流For循环for-in遍历一个集合里面的所有元素,index使用前不需要声明,只需包含在循环的声明中即可[objc]viewplaincopyforindexin1...5{println("\(index)times5is\(index*5)")}//1times5is5//2times5is10//3times5is15//4times5is20//5times5i

  3. Swift - 使用下划线_来分隔数值中的数字

    为了增强较大数值的可读性,Swift语言增加了下划线来分隔数值中的数字。不管是整数,还是浮点数,都可以使用下划线来分隔数字。

  4. 为什么我需要快速的下划线?

    Here它说,“注意:_意思是”我不在乎这个价值“,但是来自JavaScript,我不明白这是什么意思。我可以获得这些功能打印的唯一方法是在参数之前使用下划线:没有下划线,我必须这样写,以避免任何错误:我不明白这个下划线的用法。什么时候,如何以及为什么要使用这些下划线?不同用例有几个细微差别,但通常下划线意味着“忽略这个”。当声明一个新功能时,下划线告诉Swift在调用时该参数不应该没有标签–这是

  5. Android Spinner下划线颜色

    我可以使用style=“@style/Base.Widget.AppCompat.Spinner.Underlined”在spinner中添加下划线.如何仅使用样式更改下划线的颜色?我不想使用任何可绘制的文件来改变这一点.使用上面的样式,当用户点击它时,它只有下划线.它在正常状态下不会改变下划线的颜色.解决方法默认情况下,Spinner将在AppTheme中使用通过android:textColo

  6. android – 以数字开头的软件包名称的规则是什么?

    Android中的包命名约定是:但是,如果organizationName或appName以数字或下划线开头,则它将变为无效名称,因为android不接受以数字或下划线开头的单词.例如:com.1organizationName.appName无效重命名此包的惯例是什么?解决方法在官方的“NamingaPackage”java文档中,它有以下声明:Insomecases,theinternetdo

  7. 如何在EditText中删除Android自动建议下划线?

    我正在使用EditText来编写一些文本.Android的自动建议强调了这个词,直到我们达到了空间.现在,如果我输入没有空格的单词,结果文本会有下划线.这是因为我使用了Html.toHtml.现在,我会期待一些答案,例如禁用自动建议或使用view.getText().toString(),但我需要它们.我需要自动建议功能以及文本格式.解决此问题的一个示例是Gmail应用.您可以在EditText框中编写任何您想要的内容,它会发送电子邮件而不会加下划线.解决方法在getText()之前使用它.这是最直接和最

  8. js下划线和驼峰互相转换的实现(多种方法)

    本文主要介绍了js下划线和驼峰互相转换的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  9. python中的随机数种子seed()用法说明

    这篇文章主要介绍了python中的随机数种子seed()用法说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  10. 手写Spirit防抖函数underscore和节流函数lodash

    这篇文章主要介绍了手写Spirit防抖函数underscore和节流函数lodash,接下来将会带你们了解下这两者的区别,以及我们该如何手写实现这两个函数

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部