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

前端之家收集整理的这篇文章主要介绍了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;
};
原文链接:https://www.f2er.com/js/157611.html

猜你在找的JavaScript相关文章