2017-08-08 72 views
0

我想了解reduce函数的原始代码以及如何使用它。通过把它们加起来就像一个正常的减少功能不,但它不工作,我想它的方式减少JavaScript中的函数

var each = function(collection, callback){ 
     if(Array.isArray(collection)){ 
      for(var i=0;i<collection.length;i++){ 
       callback(collection[i]); 
      } 
     } 
     else{ 
      for(var key in collection){ 
       callback(collection[key]); 
      } 
     } 
    }; 

var reduce = function(collection, callback, accumulator){ 
    each(collection, function(element){ 
    if(accumulator === undefined) { 
     return accumulator = element; 
    }else { 
     return accumulator = callback(accumulator, element); 
    }; 
}); 

return accumulator; 
}; 

var sArr = [3, 2, 3, 4, 5]; 


each(sArr, function(collection){ 
    console.log(collection); 
}); 

reduce(sArr, function(collection, prev){ 
    console.log(prev = prev + sArr); 
}); 

在上面,你可以看到,我想我所有的阵列减少到一个元素我的代码是。

有人可以检查我是否做错了,如果你可以向外行解释我的减少功能是一行一行吗?

对不起新手。

+1

你在等什么,你会得到什么? (我猜你可能希望你的'reduce'函数在最后返回一个值) –

+0

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce – Ryan

+0

@ JosiahKeller:我得到了一系列的减法数字:“21,2,3,4,5” –

回答

3
reduce(sArr, function(collection, prev){ 
    return collection + prev; 
}); 

或等价

reduce(sArr, (collection, prev) => collection + prev); 

将返回正确的值。你有什么:

reduce(sArr, function(collection, prev){ 
    console.log(prev = prev + myArr); 
}); 

将尝试不存在的值(myArr)添加到当前元素,然后尝试分配回本地变量(prev),将在函数结束时被丢弃,然后显示它,最后将undefined返回到累加器,因为您没有return函数。

+0

试过这样:reduce(sArr,function(collection,prev){return to collection + prev; });但它不会给我任何东西在控制台日志上。 –

+0

'reduce(sArr,function(collection,prev){return collection + prev;});'中没有'console.log'。你试过'console.log(reduce(sArr,function(collection,prev){return collection + prev;}));'?因为它打印'17'。 – Amadan

+0

我认为它现在有效。感谢那。顺便说一句,我是这个新的初学者。试图解释我的减少功能是一行一行吗?我是个假人。 –