2013-10-13 42 views
-2

任何人都可以解釋這個JavaScript代碼發生了什麼嗎?我不理解其中i.reduce[]通過作爲初始值的部分:任何人都可以解釋在JavaScript中減少功能

function longestString(i) { 
    // It will be an array like (['big',[0,1,2,3,4],'tiny']) 
    // and the function should return the longest string in the array 

    // This should flatten an array of arrays 
    var r = i.reduce(function(a, b) { 
     return a.concat(b); 
    }, []); 

    // This should fetch the longest in the flattened array 
    return r.reduce(function (a, b) 
    { 
     return a.length > b.length ? a : b; 
    }); 
} 
+3

我儘可能清理了你的問題,但我仍然不確定你在問什麼。你問「爲什麼」'[]'通過?或者它做了什麼?或者在['Array.reduce()'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce)上尋找文檔? – Chad

+0

它不起作用嗎?輸出有什麼問題嗎?如果沒有,Google是一個更合適的地方問[[它是如何工作的]](https://www.google.com/search?q=javascript+reduce),因爲[第一個結果](https://開發者。 mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce)對函數有詳細的描述。 – DACrosby

+1

http://en.wikipedia.org/wiki/Fold_(higher-order_function) – godfrzero

回答

2

初始值在減少是一個累加器。例如,如果,如果我是[[1],[2],[3]]則減少語句相當於:

r = []; 
r = r.concat([1]); 
r = r.concat([2]); 
r = r.concat([3]); 

在減少函數的每一步都必須叫上兩個參數。在第一步中必須有一些初始值。你不能在任何情況下調用.concat,所以你從一個空數組開始。

+1

只是爲了澄清,如果提供了初始值,'reduce'從索引'0'開始。如果不是,則從索引'1'開始,使用索引'0'作爲初始值。 – thgaskell

相關問題