2017-08-08 107 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

我認爲它現在有效。感謝那。順便說一句,我是這個新的初學者。試圖解釋我的減少功能是一行一行嗎?我是個假人。 –