JavaScript에서 Reduce는 병합 방식이고 구문 형식은 "array.reduce(function(이전 값, 현재 값, 인덱스, 배열 객체){}, 초기 값)"입니다. Reduce 메소드는 누산기 역할을 하는 함수를 받으며, 배열의 각 값은 단일 값으로 감소됩니다.
이 튜토리얼의 운영 환경: Windows 7 시스템, JavaScript 버전 1.8.5, Dell G3 컴퓨터.
이전 두 글의 반복 방식(map() 구현, filter() 구현)과는 달리, Reduce()는 병합 방식입니다.
reduce는 두 개의 매개변수를 받습니다:
첫 번째 매개변수는 각 항목에 대해 호출되는 함수입니다.
이 함수는 4개의 매개변수를 받습니다:
이전 값 prev
현재 값 cur
항목 색인
배열 객체 배열
두 번째 선택적 매개변수 초기이다 병합의 기준이 되는 값입니다. Reduce 메서드는 최종 값을 반환합니다.
코드 표현:
arr.reduce(function(prev, cur, index, arr){}, initialValue)
Merge
[1, 2, 3] // 取出 1 + 2 ,填回 3 [3, 3] // 取出 3 + 3 ,填回 6 [6] // 最终结果为 6
그래서 6을 얻습니다.
Implementation
// 第一版 Array.prototype.fakeReduce = function fakeReduce(fn, base) { // let arr = base ? this.unshift(base) : this;// 首进,返回新数组的长度,影响原数组 故不能这么写 let initialArr = this; let arr = initialArr.concat(); //得到副本 if (base) arr.unshift(base); // 当存在归并基础值的参数时,将其从数组首部推入 let index; while (arr.length > 2) { index = initialArr.length - arr.length + 1; let newValue = fn.call(null, arr[0], arr[1], index, initialArr); arr.splice(0, 2); // 删除前两项,影响原数组 arr.unshift(newValue);// 把 fn(arr[0],arr[1]) 的结果从数组首部推入 } index += 1; let result = fn.call(null, arr[0], arr[1], index, initialArr); return result; };
참고:
queue 메서드 unshift()
배열 헤드에서 항목을 원하는 만큼 추가할 수 있습니다. , 반환 값은 새로운 배열 길이이며 원래 배열에 영향을 미칩니다
splice() 메서드는 Height Three에서 가장 강력한 배열 메서드로 환영받습니다
항목 수에 상관없이 삭제
2개의 매개변수 지정: (시작 삭제 위치, 항목 번호 삭제)
항목 개수에 상관없이 삽입
3개의 매개변수 지정: (시작 위치, 0, 삽입할 항목)
두 번째 매개변수 0은 삭제할 번호입니다
교체, 즉 삭제 원하는 개수의 항목 동시에 원하는 개수의 항목을 삽입하세요
3개의 매개변수 지정: (시작 위치, 삭제할 개수, 삽입할 항목 개수)
반환 값은 항상 항목에서 삭제된 항목을 포함하는 배열입니다. 원래 배열 항목. 항목이 삭제되지 않으면 빈 배열이 반환되어 원래 배열에 영향을 미칩니다
개선된 버전
또한 첫 번째 버전에는 중복된 코드가 일부 있는데, 이 부분도 개선할 수 있습니다.
두 번째 버전의 코드는 다음에서 얻습니다.
// 第二版 Array.prototype.fakeReduce = function fakeReduce(fn, base) { let initialArr = this; let arr = initialArr.concat(); if (base) arr.unshift(base); let index, newValue; while (arr.length > 1) { index = initialArr.length - arr.length + 1; newValue = fn.call(null, arr[0], arr[1], index, initialArr); arr.splice(0, 2, newValue); // 直接用 splice 实现替换 } return newValue; };
Detection:
let arr = [1, 2, 3, 4, 5]; let sum = arr.fakeReduce((prev, cur, index, arr) => { console.log(prev, cur, index, arr); return prev * cur; }, 100); console.log(sum);
100 1 0 [ 1, 2, 3, 4, 5 ] 100 2 1 [ 1, 2, 3, 4, 5 ] 200 3 2 [ 1, 2, 3, 4, 5 ] 600 4 3 [ 1, 2, 3, 4, 5 ] 2400 5 4 [ 1, 2, 3, 4, 5 ] 12000
// 第三版 Array.prototype.fakeReduce = function fakeReduce(fn, base) { if (typeof fn !== "function") { throw new TypeError("arguments[0] is not a function"); } let initialArr = this; let arr = initialArr.concat(); if (base) arr.unshift(base); let index, newValue; while (arr.length > 1) { index = initialArr.length - arr.length + 1; newValue = fn.call(null, arr[0], arr[1], index, initialArr); arr.splice(0, 2, newValue); // 直接用 splice 实现替换 } return newValue; };
[권장 학습:
javascript 고급 튜토리얼위 내용은 자바스크립트에서 Reduce 메소드를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!