오늘은 이 방법을 자세히 소개해드리도록 하겠습니다. 도움이 되셨으면 좋겠습니다. 이것은 Reduce의 기본 사용법입니다. Reduce는 배열을 작동하는 데 도움이 되는 배열 프로토타입 객체의 메서드입니다. 이는 리듀서(reducer)라고 불리는 또 다른 함수를 인수로 사용합니다. 감속기는 두 개의 매개변수를 사용합니다. 첫 번째 매개변수 param1은 마지막 감속기 실행의 결과입니다. 감속기가 처음 실행되는 경우 param1의 기본값은 배열의 첫 번째 요소 값입니다. Reduce 메소드는 for 루프와 마찬가지로 배열의 각 요소를 반복합니다. 그리고 루프의 현재 값을 매개변수 2로 전달합니다. 배열을 순회한 후, 축소는 마지막 축소기가 계산한 결과를 반환합니다. 자세한 예를 살펴보겠습니다. 다음으로 위의 코드가 어떻게 실행되는지 살펴보겠습니다. 이 코드에서는 감속기가 추가됩니다. 첫째, 처음으로 add를 실행하기 때문에 배열의 첫 번째 요소 'a'가 add의 첫 번째 매개변수로 처리되고, 그런 다음 배열의 두 번째 요소 'b'부터 루프가 시작됩니다. 이번에는 'b'가 추가할 두 번째 인수입니다. 첫 번째 계산 후 'ab'라는 결과를 얻습니다. 이 결과는 캐시되어 다음 덧셈 계산에서 param1로 사용됩니다. 동시에 배열의 세 번째 매개변수 'c'는 add의 param2로 사용됩니다. 마찬가지로, 감소는 추가할 인수로 'abc' 및 'd'를 실행하여 배열의 요소를 계속 진행합니다. 마지막으로 배열의 마지막 요소를 순회한 후 계산 결과가 반환됩니다. 이제 결과는 'abcde'입니다. 따라서 우리는 축소가 배열을 순회하는 방법이기도 함을 알 수 있습니다! 배열의 각 요소 값을 차례로 가져와서 감속기 기능을 실행합니다. 그러나 위의 루프에는 그렇게 조화로운 아름다움이 없음을 알 수 있습니다. 왜냐하면 우리는 배열의 첫 번째 요소인 'a'를 초기 param1로 취한 다음 배열의 두 번째 요소를 반복하여 param2를 얻기 때문입니다. 실제로, 우리는 감소 함수의 param1의 초기 값으로 감소의 두 번째 매개 변수를 지정할 수 있으므로 param2는 배열의 첫 번째 요소에서 시작하는 루프에서 얻어집니다. 코드는 다음과 같습니다: 이번에는 먼저 's'를 param1로 사용하여 감속기를 호출한 다음 첫 번째 요소부터 시작하여 배열을 반복합니다. 따라서 이 구문을 사용하여 첫 번째 코드 조각을 다시 작성할 수 있습니다. 다음으로 우리는 실제 프로그래밍 장에 들어가서 Reduce의 강력한 힘을 경험해보겠습니다. 배열의 모든 요소의 합을 구하고 싶다면 어떻게 하시겠습니까? 일반적으로 다음과 같이 작성할 수 있습니다. 물론 다른 방법으로 작성할 수도 있지만 for 루프를 사용하는 한 코드가 중복됩니다. 그런 다음 위의 누적 함수가 수행하는 작업을 살펴보겠습니다. 초기 합계를 0으로 설정 배열의 첫 번째 요소를 가져와서 합산합니다. 이전 단계의 결과를 합계로 캐시합니다. 배열의 다른 요소를 차례로 꺼내고 위 작업을 수행합니다. 최종 결과 반환 위의 단계를 말로 설명하면 Reduce의 사용에 부합한다는 것이 분명하다는 것을 알 수 있습니다. 따라서 우리는 축소를 사용하여 위의 코드를 다시 작성할 수 있습니다: 화살표 함수를 사용하는 데 익숙하다면 위 코드가 더 깔끔해 보일 것입니다. 코드 한 줄이면 끝! 물론 누적 곱셈과 누적은 완전히 동일합니다. 합산할 때 가중치를 추가해야 하는 경우가 많으며, 이는 감소의 우아함을 더 잘 반영할 수 있습니다. 배열의 최대값과 최소값을 얻으려면 다음과 같이 작성할 수 있습니다. 이는 이전과 동일합니다. 우리가 Reduce를 사용하면 한 줄의 코드로 이를 수행할 수 있습니다. 배열의 각 요소가 나타나는 횟수를 계산해야 하는 경우가 종종 있습니다. 감소 방법은 이를 달성하는 데 도움이 됩니다. 통계적 빈도를 저장하기 위해 객체 대신 맵 객체를 사용한다는 점에 유의하세요. 왜냐하면 배열의 요소는 객체 유형일 수 있고 객체의 키는 문자열 또는 기호 유형만 될 수 있기 때문입니다. 다음은 두 가지 예입니다. 마찬가지로 문자열에서 각 문자의 빈도를 계산하려면 먼저 문자열을 문자 배열로 변환한 다음 위의 방법을 따르면 됩니다. 문자 유형은 객체의 키로 사용될 수 있으므로 여기서는 맵을 사용하지 않습니다. 배열의 각 요소는 축소를 통해 순차적으로 액세스됩니다. 요소가 여전히 배열인 것을 발견하면 flat 메소드를 재귀적으로 호출합니다. 머리말
var arr = [1, 2, 3];
함수 감속기(parmar1, parmar2){
}
arr.reduce(감소기)
var arr = ['a', 'b', 'c', 'd', 'e'];
함수 추가(x, y) {
x + y를 반환합니다.
}
arr.reduce(추가)
var arr = ['a', 'b', 'c', 'd', 'e'];
함수 추가(x, y) {
x + y를 반환합니다.
}
arr.reduce(추가, 's')
var arr = ['a', 'b', 'c', 'd', 'e'];
함수 추가(x, y) {
x + y를 반환합니다.
}
arr.reduce(추가, '')
1. 누적 및 누적 곱셈
함수 축적(arr) {
합계 = 0으로 둡니다.
for (let i = 0; i < arr.length; i++) {
합계 = 합계 + arr[i];
}
반환 금액;
}
함수 축적(arr) {
함수 감속기(x, y) {
x + y를 반환
}
return arr.reduce(reducer, 0);
}
함수 축적(arr) {
return arr.reduce((x, y) => x + y, 0);
}
함수 곱셈(arr) {
return arr.reduce((x, y) => x * y, 1);
}
const 점수 = [
{ 점수: 90, 제목: "HTML", 가중치: 0.2 },
{ 점수: 95, 제목: "CSS", 가중치: 0.3 },
{ 점수: 85, 제목: "JavaScript", 가중치: 0.5 }
];
const result = Score.reduce((x, y) => x + y.score * y.weight, 0) // 89
2. 배열의 최대값과 최소값 가져오기
함수 최대(arr){
최대 = arr[0];
for (arr의 ele) {
if(ele > max) {
최대 = 엘레;
}
}
최대 반환;
}
arr = [3.24, 2.78, 999]로 설정합니다.
arr.reduce((x, y) => Math.max(x, y));
arr.reduce((x, y) => Math.min(x, y));
3. 배열의 요소 발생 빈도를 계산합니다.
함수 countFrequency(arr) {
return arr.reduce(function(result, ele){
// 이 요소가 이전에 계산되었는지 여부를 판단합니다.
if (result.get(ele) != 정의되지 않음) {
/**
* 이 요소가 이전에 계산된 경우
* 발생 빈도를 1 증가시킵니다.
*/
result.set(ele, result.get(ele) + 1)
} 또 다른 {
/**
* 이 요소가 이전에 계산되지 않은 경우,
* 발생 빈도를 1로 설정
*/
result.set(ele, 1);
}
결과 반환;
}, 새로운 맵());
}
str = 'helloworld';
str.split('').reduce((result, currentChar) => {
결과[currentChar] ? 결과[currentChar] ++ : 결과[currentChar] = 1;
결과 반환;
}, {})
4. 여러 배열의 병합
function Flat(arr = []) {
return arr.reduce((t, v) => t.concat(Array.isArray(v) ? Flat(v) : v), [])
}