JavaScript Reduce 및 ReduceRight에 대한 자세한 설명

高洛峰
풀어 주다: 2016-12-28 09:38:57
원래의
1404명이 탐색했습니다.

reduce 메서드(오름차순)

구문:

array1.reduce(callbackfn[,initialValue])

JavaScript reduce和reduceRight详解

반환 값 :

지난번 콜백 함수를 호출하여 얻은 누적 결과입니다.

예외:

다음 조건 중 하나라도 충족되면 TypeError 예외가 발생합니다.

callbackfn 매개변수는 함수 개체가 아닙니다.

배열에 요소가 포함되어 있지 않으며initialValue가 제공되지 않았습니다.

콜백 함수 구문:

function callbackfn(previousValue, currentValue, currentIndex, array1)

최대 4개의 매개변수를 사용하여 콜백 함수를 선언할 수 있습니다.

다음 표에는 콜백 함수 매개변수가 나와 있습니다.

JavaScript reduce和reduceRight详解

콜백 함수를 처음 호출할 때

콜백 함수를 처음 호출할 때, 인수로 제공되는 값은 축소 메소드를 사용하는지 여부에 따라 달라집니다. initialValue 인수가 있습니다.

reduced 메소드에initialValue를 제공하는 경우:

이전 값 매개변수는initialValue입니다.
currentValue 매개변수는 배열의 첫 번째 요소 값입니다.

initialValue가 제공되지 않은 경우:

previousValue 매개변수는 배열의 첫 번째 요소 값입니다.
currentValue 매개변수는 배열의 두 번째 요소 값입니다.

배열 객체 수정

콜백 함수를 통해 배열 객체를 수정할 수 있습니다.

다음 표는 감소 메소드가 시작된 후 배열 객체를 수정하여 얻은 결과를 설명합니다.

JavaScript reduce和reduceRight详解

예:

1. 다음 예에서는 배열 값을 문자열로 연결하며 각 값은 "::"으로 구분됩니다. 감소 메소드에 초기 값이 제공되지 않으므로 콜백 함수에 대한 첫 번째 호출에서는 이전 값 매개변수로 "abc"가 있고 currentValue 매개변수로 "def"가 있습니다.

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
로그인 후 복사

2. 다음 예에서는 반올림된 값을 배열에 추가합니다. Reduce 메소드는 초기값 0으로 호출됩니다.

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
로그인 후 복사

이 질문에 대한 분석:

먼저 초기 값 0이 제공되고 currentDigit은 다음에서 시작됩니다. 4, 메서드가 네 번 호출되므로 네 가지 메서드 호출의 매개 변수를 작성할 수 있습니다: (0,4,0,array), (4,1,1,array), (1,2,2) ,array), (2,5 ,3,array), 다시 계산하면 초기값이 0이므로 각 메소드의 반환값을 계산하여 최종적으로 합산하면 됩니다. array.length는 항상 4이고 계산된 4개의 값은 4000+100+20+5=4125

reduceRight 메서드(내림차순)

reduceRight 구문 및 콜백 함수 규칙과 합계 축소 방법은 동일합니다. 차이점은 축소는 오름차순, 즉 인덱스가 0부터 시작하는 반면, ReduceRight는 내림차순, 즉 인덱스가 arr.length-1에서 시작한다는 것입니다. 초기값이 있는 경우 마지막 숫자부터 계산이 시작됩니다. 초기값이 없는 경우 PreviousValue 매개변수는 배열의 마지막 요소 값이고 currentValue는 배열의 끝에서 두 번째 요소의 값입니다.

예:

1. 다음 예에서는 배열에서 1과 10 사이의 값을 가진 요소를 가져옵니다. ReduceRight 메서드에 제공되는 초기 값은 빈 배열입니다.

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 메서드를 호출할 수 있고 호출 메서드를 사용하여 매개변수를 도입할 수 있습니다. 프로토타입 체인, 즉 Array.prototype.reduceRight.call(word, AppendToArray, "the ");

읽어 주셔서 감사합니다. 모두에게 도움이 되기를 바랍니다. 감사합니다. 이 사이트 지원에 대한 귀하의 지원에 감사드립니다!

JavaScript Reduce와 ReduceRight에 대한 더 자세한 글은 PHP 중국어 홈페이지를 주목해주세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!