JavaScript 수동 배열의 일반 함수 요약
앞말
개발 과정에서 우리는 자주 수조의api 관련 조작을 사용하는데 그 중에서 forEach,filter,find,findIndex,map,some,every,reduce,reduceRight 등 함수 방법을 포함한다.
오늘 우리는 이 함수들을 손으로 써서 수조의 이 함수들을 실현하는 방법을 시험해 보았다.편의를 위해 그룹 원형 대상prototype에서 직접 확장합니다.
이 글은 Githab에 업로드되었고, 더 많은 이전 글은 분류 정리되었다.
본문
매개변수 설명
callbackFn 콜백 함수
thisArg에서 callbackFn을 실행할 때 사용하는 this 값
currentValue 배열에서 처리 중인 요소
인덱스 현재 인덱스
array 소스 그룹
accumulator 누적기
initialValue reduce reduceRight callbackFn 함수를 처음 호출할 때 첫 번째 매개 변수의 값 기본값
element가 스스로 실현하는this 대상
forEach 함수
문법:
arr.forEach(callbackFn(currentValue [, index [, array]])[, thisArg])
방법 기능: 수조의 모든 요소에 대해 주어진 함수를 한 번 실행합니다.반환: undefined.
사용자 정의 함수: myForEach.
Array.prototype.myForEach = function(callbackFn, thisArg) {
if (typeof callbackFn !== 'function') throw ('callbackFn ');
let element = this,
len = element && element.length || 0;
if (!thisArg) thisArg = element;
for (let index = 0; index < len; index++) {
callbackFn.call(thisArg, element[index], index, element);
}
};
filter 함수
문법:
var newArray = arr.filter(callbackFn(currentValue[, index[, array]])[, thisArg])
방법 기능: 제공된 함수를 통해 실행된 모든 요소를 포함하는 새 그룹을 만듭니다.반환: 테스트를 통과한 원소로 구성된 새로운 수조입니다. 테스트를 통과한 원소가 없으면 빈 수조로 돌아갑니다.
사용자 정의 함수: myFilter.
Array.prototype.myFilter = function(callbackFn, thisArg) {
if (typeof callbackFn !== 'function') throw ('callbackFn ');
let element = this,
len = element && element.length || 0,
result = [];
if (!thisArg) thisArg = element;
for (let index = 0; index < len; index++) {
if (callbackFn.call(thisArg, element[index], index, element)) result.push(element[index]);
}
return result;
};
find 함수
문법:
arr.find(callbackFn[, thisArg])
방법 기능: 수조에서 제공한 테스트 함수를 만족시키는 첫 번째 요소의 값을 되돌려줍니다.그렇지 않으면 undefined로 돌아갑니다.반환: 그룹 중 첫 번째로 테스트 함수를 제공하는 요소의 값을 만족시킵니다. 그렇지 않으면 undefined를 되돌려줍니다.
사용자 정의 함수: myFind.
Array.prototype.myFind = function(callbackFn, thisArg) {
if (typeof callbackFn !== 'function') throw ('callbackFn ');
let element = this,
len = element && element.length || 0;
if (!thisArg) thisArg = element;
for (let index = 0; index < len; index++) {
if (callbackFn.call(thisArg, element[index], index, element)) {
return element[index];
}
}
return
}
findIndex 함수
문법:
arr.findIndex(callbackFn[, thisArg])
방법 기능: 수조에서 제공한 테스트 함수를 만족시키는 첫 번째 요소의 값을 되돌려줍니다.그렇지 않으면 undefined로 돌아갑니다.되돌아오기: 테스트 함수를 제공하는 첫 번째 요소의 인덱스를 제공합니다.그렇지 않으면 -1로 돌아갑니다.
사용자 정의 함수: myFindIndex
Array.prototype.myFindIndex = function(callbackFn, thisArg) {
if (typeof callbackFn !== 'function') throw ('callbackFn ');
let element = this,
len = element && element.length || 0;
if (!thisArg) thisArg = element;
for (let index = 0; index < len; index++) {
if (callbackFn.call(thisArg, element[index], index, element)) return index;
}
return -1;
}
fill 함수
문법:
arr.fill(value[, start[, end]])
방법 기능: 시작 색인에서 종료 색인까지의 모든 요소를 고정 값으로 채웁니다.종료 인덱스는 포함되지 않습니다.반환: 교체된 값을 반환합니다. 원수 그룹이 변경됩니다.
사용자 정의 함수: myFill.
Array.prototype.myFill = function(value, start = 0, end) {
let element = this,
len = element && element.length || 0;
end = end || len;
let loopStart = start < 0 ? 0 : start, //
loopEnd = end >= len ? len : end; //
for (; loopStart < loopEnd; loopStart++) {
element[loopStart] = value;
}
return element;
}
맵 함수
문법:
var new_array = arr.map(function callbackFn(currentValue[, index[, array]]) {// Return element for new_array }[, thisArg])
방법 기능: 새 그룹을 만듭니다. 그 결과 이 그룹의 모든 요소는 제공된 함수를 한 번 호출한 후 되돌아오는 값입니다.반환: 테스트 그룹 중 최소한 1개의 요소가 제공된 함수 테스트를 통과했는지 확인합니다.이 값은 Boolean 유형의 값을 반환합니다.원수 그룹의 모든 요소가 리셋 함수를 실행한 결과로 구성된 새 그룹
사용자 정의 함수: myMap.
Array.prototype.myMap = function(callbackFn, thisArg) {
if (typeof callbackFn !== 'function') throw ('callbackFn ');
let element = this,
len = element && element.length || 0,
result = [];
if (!thisArg) thisArg = element;
for (let index = 0; index < len; index++) {
result[index] = callbackFn.call(thisArg, element[index], index, element);
}
return result;
}
some 함수
문법:
arr.some(callbackFn(currentValue[, index[, array]])[, thisArg])
방법 기능: 테스트 그룹 중 최소한 1개의 요소가 제공된 함수 테스트를 통과했는지 여부.이 값은 Boolean 유형의 값을 반환합니다.반환: 그룹에 최소한 하나의 요소가 리셋 함수 테스트를 통과하면true로 되돌아옵니다.모든 요소가 리셋 함수의 테스트를 통과하지 않아false가 됩니다.
사용자 정의 함수: mySome.
Array.prototype.mySome = function(callbackFn, thisArg) {
if (typeof callbackFn !== 'function') throw ('callbackFn ');
let element = this,
len = element && element.length || 0;
if (!thisArg) thisArg = element;
for (let index = 0; index < len; index++) {
if (callbackFn.call(thisArg, element[index], index, element)) return true;
}
return false;
}
every 함수
문법:
arr.every(callbackFn(currentValue[, index[, array]])[, thisArg])
방법 기능: 한 수조 내의 모든 원소가 특정한 함수를 통과할 수 있는지 테스트합니다.그것은 부울 값을 되돌려줍니다.반환: 리셋 함수의 매번 반환이true 값이면true를 반환합니다. 그렇지 않으면false를 반환합니다.
사용자 정의 함수: myEvery.
Array.prototype.myEvery = function(callbackFn, thisArg) {
if (typeof callbackFn !== 'function') throw ('callbackFn ');
let element = this,
len = element && element.length || 0;
if (!thisArg) thisArg = element;
for(let index = 0; index < len; index++) {
if (!callbackFn.call(thisArg, element[index], index, element)) return false;
}
return true;
}
reduce 함수
문법:
arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])
방법 기능: 수조의 모든 요소에 대해 사용자가 제공하는reducer 함수 (승차 실행) 를 실행하고 그 결과를 하나의 반환값으로 요약합니다.반환: 함수 누적 처리 결과.
사용자 정의 함수: myReduce.
Array.prototype.myReduce = function(callbackFn, initialValue) {
if (typeof callbackFn !== 'function') throw ('callbackFn ');
let element = this,
len = element.length || 0,
index = 0,
result;
if (arguments.length >= 2) {
result = arguments[1];
} else {
while (index < len && !(index in element)) index++;
if (index >= len) throw new TypeError('Reduce of empty array ' + 'with no initial value');
result = element[index++];
}
while (index < len) {
if (index in element) result = callbackFn(result, element[index], index, element);
index++;
}
return result;
}
reduceRight 함수
문법:
arr.reduceRight(callback(accumulator, currentValue[, index[, array]])[, initialValue])
방법 기능: 함수를 누적기 (accumulator) 와 수조의 모든 값 (오른쪽에서 왼쪽) 으로 받아들여 단일 값으로 줄인다.반환: 실행 후 반환 값입니다.
사용자 정의 함수: myReduceRight.
Array.prototype.myReduceRight = function(callbackFn, initialValue) {
if (typeof callbackFn !== 'function') throw ('callbackFn ');
let element = this,
len = element.length || 0,
index = len - 1,
result;
if (arguments.length >= 2) {
result = arguments[1];
} else {
while (index >= 0 && !(index in element)) {
index--;
}
if (index < 0) {
throw new TypeError('reduceRight of empty array with no initial value');
}
result = element[index--];
}
for (; index >= 0; index--) {
if (index in element) {
result = callbackFn(result, element[index], index, element);
}
}
return result;
}
마지막
자바스크립트 핸드폰 그룹 상용 함수에 대한 이 글은 여기까지 소개합니다. JS 핸드폰 그룹 상용 함수에 대한 더 많은 내용은 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보시기 바랍니다. 앞으로 많은 응원 부탁드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[2022.04.19] 자바스크립트 this - 생성자 함수와 이벤트리스너에서의 this18일에 this에 대해 공부하면서 적었던 일반적인 함수나 객체에서의 this가 아닌 오늘은 이벤트리스너와 생성자 함수 안에서의 this를 살펴보기로 했다. new 키워드를 붙여 함수를 생성자로 사용할 때 this는...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.