자바 스크립트는 방법은 완전한 가이드를하지 않습니다) (감소

감소 () 메소드 (왼쪽에서 오른쪽)의 각 값의 배열이 수축하기 시작하고 결국 새로운 ES5의 값을 줄이는 방법의 foreach와 항목 별 접근법의 또 다른 배열, 어큐뮬레이터로서의 기능을 얻어 ,지도 및 다른 방법 배열은 어떤 차이가 있도록 만들 않습니다.

구문 :

MDN 가입일 (콜백 [로 초기]) - 더

매개 변수 :

  • 함수 호출 각각에 대한 콜백 (하나 개의 어레이는, 함수는 네 허용 :)
    • PREVIOUSVALUE (콜백 함수의 리턴 값 또는 초기 값)
    • CurrentValue에 (현재의 배열 요소가 처리되는)
    • currentIndex (첨자 배열 요소가 현재 처리중인)
    • 배열 (배열 호 () 메소드를 감소)
  • (전달 된 값을 임의로 PREVIOUSVALUE 초기치. 첫 번째 통화로 콜백 함수까지)로 초기을

그래픽 매개 변수

위의 모호한 구문에도 불구하고 다음의 예에 저희에게 직접 소개 :

예 :

어레이 도착은 [1,2,3,4] 어레이 = 시크

대해 forEach 달성
1 
2
3
VAR의 도착 = [ 1, 2, 3, 4], 
합계 = 0;
(함수 (E) + {합계 = E});
지도 실현
1 
2
3
VAR의 도착 = [ 1, 2, 3, 4], 
합계 = 0;
편곡. 맵 (함수 (OBJ) { 합계 = + OBJ는}) // 정의 반환 배열. 합계 = 10 단지 에 대한 데모
구현을 감소
1 
2
VAR의 도착 = [ 1, 2, 3, 4; 
( 기능 (프리, CUR) { 복귀 사전 CUR} +);

예, 축적하기위한이 작업을 위해 특별히 감소 인수의이 종류가 매우 편리, 작동하도록 설계되어 축적된다.
그래서 질문은, 매개 변수의 방법은 결국 무엇에 사용을 줄일 수있다?

매개 변수 분해
1로 초기 값을 전달하지 않는다
1 
2
VAR의 도착 = [ 1, 2, 3]; 
( 기능 ( 프리, CUR, 인덱스 도착) { 디버거; 복귀 사전 CUR} +);

인수 어레이 프로브를 얻을 :

2. 수신로 초기 값
1 
2
VAR의 도착 = [ 1, 2, 3] 
( 기능 ( 프리, CUR, 인덱스 도착) { 디버거; 복귀 사전 CUR} +, 10);

그것은로 초기보다 재귀 번있을 것입니다 통과 볼 수 있으며,로 초기 값 모두의 역할을 이해한다 : 수신 시작 값 (추가 보너스) 축적하고 다른 작업을.
네 개의 파라미터 Callbackfn 디버거의 동적 변화를 나타내는 특성도를 가질 수있다.
그 다음 방법은 당신이 할 수있는 것들의 사용을 줄일 수있다?

더 많은 예제

제품 수요

1
VAR 프로 = ( 함수 (프리, CUR, 인덱스 도착) { 창 미리} * CUR)

최대 모집

1
VAR 최대 = ( 함수 (프리, CUR, 색인 전압, 도착) { 복귀 사전> CUR 프리 : CUR;}?);

또한, 사용하는 경우 거의 모든 문제없이 NodeJs 환경에서 줄일 수 있지만,이 방법은 클라이언트의 브라우저를 줄이고 사용하는 경우, 다음과 같은 브라우저와 호환 IE8에 필요할 수 있습니다.
물론, 우리는이 문제를 해결하기 위해 라이브러리를 도입 할 수 있습니다, 그것은 jQuery를 공식 웹 사이트에서, 한 쌍은 여전히 주장 jQuery.reduce ()와 JQuery와 공식 추가 논의를 8 년까지 감소 플러그인 존재 JQuery와 같이 적합 줄일 수있다, 재미있다 . 심지어 나중에 ES5의 실현을 줄이기 위해 추가.

이 핵심에 도움이되지 않습니다, 그것은 항상 플러그인에 포함될 수 있습니다. - flesler로

개요

이 시점에서, 우리는 이미지를 표현 할 수 대해 forEach는,지도 및 감소의 차이점은 다음과 같습니다 :

  • foreach는 방법은 밖으로 일부 프로그래머가 그들이하고 싶은 할 배열의 각 값입니다
  • 지도는 어떤 프로그래머가 그들이하고 싶은 할 수있는 방법으로 각 배열의 값을 후 새로운 배열을 반환하는 것입니다
  • 각 어레이의 합계의 값을 감소시키는 방법은, 이전 (또는 어레이로 초기의 처음 값의 첫번째 테스트 값)로 복귀 첨가

최종 : 좀 더 깊이 삽입

사용의 배열 객체 메소드 감소 :

왕 반송 벽돌이 데이터 포맷을 얻을 : var arr = [ {name: 'brick1'}, {name: 'brick2'}, {name: 'brick3'} ]
원하는 형식의 데이터 등은 :  'brick1, brick2 & brick3'
물론 배열 비정상 유동 : [{이름 'brick1' }] 얻어진 수신 어레이 빈 'brick1' 공간

해결책
1 
2
3
4
5
6
7
8
9
10
11
12
13
14
VAR의 도착 = [{이름 : 'brick11'}, {이름 : 'brick12'}, {이름 : 'brick13'}] 
함수 carryBricks (도착) {
창 ( 함수 (이전, 현재, 인덱스 어레이) {
경우 (인덱스 === 0) {
반환
}
다른 경우 (인덱스 === 사항 Array.length - 1) {
복귀 이전 + '및'+
}
다른 {
복귀 이전 + ','+
}
} '');
}

반환 결과 :brick11, brick12 & brick13

이 시점에서 더이 확장 벽돌 더미가 좋았다 원래 스택 들어오는로 초기 값의 경우 :

1 
2
3
4
5
6
7
8
9
10
11
12
13
var arr =  [ {name: 'brick11'}, {name: 'brick12'}, {name: 'brick13'} ]
var bricks = 'brick1, brick2, brick3, '
functioncarryBricks(arr,bricks){
return (function(prev, current, index, array){
if (index === 0){
return prev +
}
elseif (index === array.length - 1){
return prev + ' & ' +
}
return prev + ', ' +
}, bricks);
}

返回结果:brick1, brick2, brick3, brick11, brick12 & brick13

추천

출처www.cnblogs.com/qgp777/p/11649406.html