누구든지이 코드의 작동 방식을 설명 할 수 있습니까?자바 스크립트 배열 고차 함수
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]
누구든지이 코드의 작동 방식을 설명 할 수 있습니까?자바 스크립트 배열 고차 함수
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]
당신은 우리가 전달하는 콜백 내부 console.log
를 추가 할 수 있습니다 : 나는 이러한 기능을 이해하지만이 코드는 initialy 어떻게 작동하는지 이해하지 않는, 배열에 reduce
및 concat
기능 보았다 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])
로 초기에는 빈 어레이는인 경우이며.
각 단계를 설명했습니다.
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);
}, []));
첫 번째 루프는'flat - [] & current - [ 1,2,3]'맞죠? – Bhavik
평면 - [] 왜? –
@Bhavik 글쎄, 첫 번째 루프는 실제로'flat - [1,2,3] & current - [4,5]'일 것이다. –
그런데 실제로는 .reduce()
의 잘못된 사용입니다. 이 작업에서는 초기 배열이 필요 없습니다. 이전 핸드()와 현재 핸드 (c
) 만 가능합니다. 이러한;
var arrays = [[1, 2, 3], [4, 5], [6]];
console.log(arrays.reduce((p,c) => p.concat(c)));
참고 : 반환 값의 타입이 배열 항목이 다른 경우 초기가 편리합니다. 그러나이 경우 배열을 처리하고 초기 중복 사용을 렌더링하는 배열을 반환합니다.
그래서 우리가하는 2D 배열이 있다고 가정하면 : [[1, 2, 3], [4, 5], [6]]
이 줄어들고이 함수는 2 개의 주요 구성 요소로 나뉩니다.
array.reduce((accumulator, iterator) => {...}, initialValue);
flat
- 이것은 감소 축적된다.reduce
함수의 두 번째 매개 변수에 전달 된 초기 값이 주어지며 반복기가 통과 할 때 값을 저장하는 데 사용됩니다.current
- 이것은 감소되는 데이터 세트 내의 모든 값을 통과하는 반복자입니다.데이터 세트를 반복 할 때 예제에서는 누적 배열을 현재 값과 연결하고 마지막으로 새 배열을 갖습니다.
Array.reduce
는 다음 서명 콜백 기대 :
함수 (previousElement, currentElement, 인덱스 어레이)
및 임의의 초기 값.
첫 번째 반복에서는 initialValue
이 전달되면 previousElement
이이 값을 보유하고 은 firstArrayElement를 보유합니다.
이 아닌 경우 previousElement
은 firstArrayElement
이고, currentElement
은 secondArrayElement
을 보유합니다.
다음 반복의 경우 previousElement
은 이전 반복에서 반환 된 값을 보유하고 currentElement
은 다음 값을 유지합니다.
은 그래서 예에서, 처음 flat
는 []
을 보유하고 있습니다.
return flat.concat(current);
은 새로운 병합 된 배열을 반환합니다. 이 값은 다음 반복에 대해 flat
으로 사용되며이 프로세스가 반환됩니다. 마지막으로 마지막 반복에서 반환 된 값이 최종 반환 값으로 사용되며 콘솔에 출력됩니다.
'function (akkumulator, nextItem) ... '을 생각하면'function (flat, current) ...'대신에 도움이된다. – birdspider