2017-03-06 2 views
0

누구든지이 코드의 작동 방식을 설명 할 수 있습니까?자바 스크립트 배열 고차 함수

var arrays = [[1, 2, 3], [4, 5], [6]]; 
 
    
 
console.log(arrays.reduce(function(flat, current) { 
 
    return flat.concat(current); 
 
}, [])); 
 
// → [1, 2, 3, 4, 5, 6]

+0

'function (akkumulator, nextItem) ... '을 생각하면'function (flat, current) ...'대신에 도움이된다. – birdspider

답변

0

당신은 우리가 전달하는 콜백 내부 console.log를 추가 할 수 있습니다 : 나는 이러한 기능을 이해하지만이 코드는 initialy 어떻게 작동하는지 이해하지 않는, 배열에 reduceconcat 기능 보았다 reduce 및 출력에 대한 생각 :

var arrays = [[1, 2, 3], [4, 5], [6]]; 
 

 
console.log(arrays.reduce(function(flat, current) { 
 
    console.log('flat: '+ flat + 'current: ' + current) 
 
    return flat.concat(current); 
 
}, []));

처음에는 빈 배열과 배열 [1,2,3]을 연결합니다. 결과는 [1,2,3] 요소를 가진 새로운 배열입니다. 그런 다음이 배열을 arrays 배열 [4,5]의 다음 요소와 연결합니다. 결과는 [1,2,3,4,5] 요소를 가진 새로운 배열이됩니다. 마지막으로이 배열을 arrays의 마지막 요소 인 array [6]과 연결합니다. 따라서 결과는 배열 [1,2,3,4,5,6]입니다.

위의 내용을 이해하기 위해서는 위의 내용을 참조하십시오. Array.prototype.reduce().

이는 상기 링크에 기재된 바와 같이 :

는 (저감) 방법이 어큐뮬레이터에 대해 기능 및 배열의 ​​각 값 적용 (에서 왼쪽에서 오른쪽으로)를로 줄이기 단일 값

은 또한 구문

arr.reduce(callback, [initialValue]) 

로 초기에는 빈 어레이는인 경우이며.

0

각 단계를 설명했습니다.

var arrays = [[1, 2, 3], [4, 5], [6]]; 
 

 
console.log(arrays.reduce(function(flat, current) { 
 
    
 
    // first loop: flat - [1,2,3], current - [4,5] 
 
    // [1,2,3].concat([4,5]) -> [1,2,3,4,5] 
 
    
 
    //second/last loop: flat - [1,2,3,4,5], current - [6] 
 
    // [1,2,3,4,5].concat([6]) -> [1,2,3,4,5,6] 
 
    
 
    //function stop 
 

 
    return flat.concat(current); 
 
}, []));

+1

첫 번째 루프는'flat - [] & current - [ 1,2,3]'맞죠? – Bhavik

+0

평면 - [] 왜? –

+0

@Bhavik 글쎄, 첫 번째 루프는 실제로'flat - [1,2,3] & current - [4,5]'일 것이다. –

0

그런데 실제로는 .reduce()의 잘못된 사용입니다. 이 작업에서는 초기 배열이 필요 없습니다. 이전 핸드()와 현재 핸드 (c) 만 가능합니다. 이러한;

var arrays = [[1, 2, 3], [4, 5], [6]]; 
 
    
 
console.log(arrays.reduce((p,c) => p.concat(c)));

참고 : 반환 값의 타입이 배열 항목이 다른 경우 초기가 편리합니다. 그러나이 경우 배열을 처리하고 초기 중복 사용을 렌더링하는 배열을 반환합니다.

0

그래서 우리가하는 2D 배열이 있다고 가정하면 : [[1, 2, 3], [4, 5], [6]]이 줄어들고이 함수는 2 개의 주요 구성 요소로 나뉩니다.

array.reduce((accumulator, iterator) => {...}, initialValue); 
  • flat - 이것은 감소 축적된다.reduce 함수의 두 번째 매개 변수에 전달 된 초기 값이 주어지며 반복기가 통과 할 때 값을 저장하는 데 사용됩니다.
  • current - 이것은 감소되는 데이터 세트 내의 모든 값을 통과하는 반복자입니다.

데이터 세트를 반복 할 때 예제에서는 누적 배열을 현재 값과 연결하고 마지막으로 새 배열을 갖습니다.

0

Array.reduce는 다음 서명 콜백 기대 :

함수 (previousElement, currentElement, 인덱스 어레이)

및 임의의 초기 값.

첫 번째 반복에서는 initialValue이 전달되면 previousElement이이 값을 보유하고 은 firstArrayElement를 보유합니다.

이 아닌 경우 previousElementfirstArrayElement이고, currentElementsecondArrayElement을 보유합니다.

다음 반복의 경우 previousElement은 이전 반복에서 반환 된 값을 보유하고 currentElement은 다음 값을 유지합니다.


은 그래서 예에서, 처음 flat[]을 보유하고 있습니다.

return flat.concat(current);은 새로운 병합 된 배열을 반환합니다. 이 값은 다음 반복에 대해 flat으로 사용되며이 프로세스가 반환됩니다. 마지막으로 마지막 반복에서 반환 된 값이 최종 반환 값으로 사용되며 콘솔에 출력됩니다.