감소 () 메소드 (왼쪽에서 오른쪽)의 각 값의 배열이 수축하기 시작하고 결국 새로운 ES5의 값을 줄이는 방법의 foreach와 항목 별 접근법의 또 다른 배열, 어큐뮬레이터로서의 기능을 얻어 ,지도 및 다른 방법 배열은 어떤 차이가 있도록 만들 않습니다.
구문 :
MDN 가입일 (콜백 [로 초기]) - 더
매개 변수 :
- 함수 호출 각각에 대한 콜백 (하나 개의 어레이는, 함수는 네 허용 :)
- PREVIOUSVALUE (콜백 함수의 리턴 값 또는 초기 값)
- CurrentValue에 (현재의 배열 요소가 처리되는)
- currentIndex (첨자 배열 요소가 현재 처리중인)
- 배열 (배열 호 () 메소드를 감소)
- (전달 된 값을 임의로 PREVIOUSVALUE 초기치. 첫 번째 통화로 콜백 함수까지)로 초기을
그래픽 매개 변수
위의 모호한 구문에도 불구하고 다음의 예에 저희에게 직접 소개 :
예 :
어레이 도착은 [1,2,3,4] 어레이 = 시크
대해 forEach 달성
1 |
VAR의 도착 = [ 1, 2, 3, 4], |
지도 실현
1 |
VAR의 도착 = [ 1, 2, 3, 4], |
구현을 감소
1 |
VAR의 도착 = [ 1, 2, 3, 4; |
예, 축적하기위한이 작업을 위해 특별히 감소 인수의이 종류가 매우 편리, 작동하도록 설계되어 축적된다.
그래서 질문은, 매개 변수의 방법은 결국 무엇에 사용을 줄일 수있다?
매개 변수 분해
1로 초기 값을 전달하지 않는다
1 |
VAR의 도착 = [ 1, 2, 3]; |
인수 어레이 프로브를 얻을 :
2. 수신로 초기 값
1 |
VAR의 도착 = [ 1, 2, 3] |
그것은로 초기보다 재귀 번있을 것입니다 통과 볼 수 있으며,로 초기 값 모두의 역할을 이해한다 : 수신 시작 값 (추가 보너스) 축적하고 다른 작업을.
네 개의 파라미터 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 |
VAR의 도착 = [{이름 : 'brick11'}, {이름 : 'brick12'}, {이름 : 'brick13'}] |
반환 결과 :brick11, brick12 & brick13
이 시점에서 더이 확장 벽돌 더미가 좋았다 원래 스택 들어오는로 초기 값의 경우 :
1 |
var arr = [ {name: 'brick11'}, {name: 'brick12'}, {name: 'brick13'} ] |
返回结果:brick1, brick2, brick3, brick11, brick12 & brick13