javascript – 从头开始​​创建下划线缩减功能

我正在创建自己的回调函数和更高阶函数组.我坚持复制下划线缩减功能或._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;
};

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


什么是深拷贝与浅拷贝?深拷贝与浅拷贝是js中处理对象或数据复制操作的两种方式。‌在聊深浅拷贝之前咱得了解一下js中的两种数据类型:
前言 今天复习了一些前端算法题,写到一两道比较有意思的题:重建二叉树、反向输出链表每个节点 题目 重建二叉树: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列 {1,2,4,7,3,5,6,8} 和中序遍历序列 {
最近在看回JavaScript的面试题,this 指向问题是入坑前端必须了解的知识点,现在迎来了ES6+的时代,因为箭头函数的出现,所以感觉有必要对 this 问题梳理一下,所以刚好总结一下JavaScript中this指向的问题。
js如何实现弹出form提交表单?(图文+视频)
js怎么获取复选框选中的值
js如何实现倒计时跳转页面
如何用js控制图片放大缩小
JS怎么获取当前时间戳
JS如何判断对象是否为数组
JS怎么获取图片当前宽高
JS对象如何转为json格式字符串
JS怎么获取图片原始宽高
怎么在click事件中调用多个js函数
js如何往数组中添加新元素
js如何拆分字符串
JS怎么对数组内元素进行求和
JS如何判断屏幕大小
js怎么解析json数据
js如何实时获取浏览器窗口大小
原生JS实现别踩白块小游戏(五)