reduce 方法(升序)
語法:
array1.reduce(callbackfn[, initialValue])
異常: 當滿足下列任一條件時,將引發 TypeError 異常:callbackfn 參數不是函數物件。 數組不包含元素,且未提供 initialValue。 回呼函數語法: function callbackfn(previousValue, currentValue, currentIndex, array1) 可使用最多四個參數來宣告回調函數。 下表列出了回呼函數參數。第一次呼叫回呼函數
在第一次呼叫回呼函數時,作為參數提供的值取決於 reduce 方法是否具有 initialValue 參數。 如果提供 reduce 方法 initialValue:previousValue 參數為 initialValue。currentValue 參數是數組中的第一個元素的值。
如果未提供 initialValue:
currentValue 參數是數組中的第二個元素的值。
修改數組物件
實例:
1.下面的範例將陣列值連接成字串,各個值以「::」分隔開。由於未向 reduce 方法提供初始值,因此第一次呼叫回呼函數時會將「abc」作為 previousValue 參數並將「def」作為 currentValue 參數。function appendCurrent (previousValue, currentValue) { return previousValue + "::" + currentValue; } var elements = ["abc", "def", 123, 456]; var result = elements.reduce(appendCurrent); document.write(result); // Output: // abc::def::123::456
function addRounded (previousValue, currentValue) { return previousValue + Math.round(currentValue); } var numbers = [10.9, 15.4, 0.5]; var result = numbers.reduce(addRounded, 0); document.write (result); // Output: 27
3.下面的範例將數值新增至陣列。 currentIndex 與array1 參數用於回呼函數
function addDigitValue(previousValue, currentDigit, currentIndex, array) { var exponent = (array.length - 1) - currentIndex; var digitValue = currentDigit * Math.pow(10, exponent); return previousValue + digitValue; } var digits = [4, 1, 2, 5]; var result = digits.reduce(addDigitValue, 0); document.write (result); // Output: 4125
function Process2(previousArray, currentValue) { var nextArray; if (currentValue >= 1 && currentValue <= 10) nextArray = previousArray.concat(currentValue); else nextArray = previousArray; return nextArray; } var numbers = [20, 1, -5, 6, 50, 3]; var emptyArray = new Array(); var resultArray = numbers.reduceRight(Process2, emptyArray); document.write("result array=" + resultArray); // Output: // result array=3,6,1
2.reduceRight 方法可套用於字串。下面的範例示範如何使用此方法反轉字串中的字元。
function AppendToArray(previousValue, currentValue) { return previousValue + currentValue; } var word = "retupmoc"; var result = [].reduceRight.call(word, AppendToArray, "the "); // var result = Array.prototype.reduceRight.call(word, AppendToArray, "the "); document.write(result); // Output: // the computer
這裡可以直接使用空數組呼叫reduceRight方法,並且使用call方法將參數引入。也可以是直接使用原型鏈的方式進行調用,即Array.prototype.reduceRight.call(word, AppendToArray, "the ");