반응형
SMALL
오늘은 Array 메소드의 every()에 대해 알아보자.
MDN의 설명은 이러하다.
every는 callbackFn이 거짓을 반환하는 요소를 찾을때까지 배열에 있는 각 요소에 대해 한 번씩 callbackFn 함수를 실행합니다. 해당하는 요소를 발견한 경우 every는 즉시 false를 반환합니다. 그렇지 않으면, 즉 모든 값에서 참을 반환하면 true를 반환합니다.
할당한 값이 있는 인덱스에서만 callbackFn을 호출합니다. 희소 배열의 빈 슬롯에서는 호출되지 않습니다.
callbackFn은 요소의 값, 해당 요소의 인덱스 및 순회하고 있는 배열 세 가지 인수와 함께 호출됩니다.
thisArg 매개변수를 every에 제공한 경우 callbackFn의 this로 사용됩니다. 그 외엔 undefined값을 사용합니다. 최종적으로 callbackFn이 볼 수 있는 this의 값은 함수가 볼 수 있는 this를 결정하는 평소 규칙을 따릅니다.
every는 호출한 배열을 변형하지 않습니다.
every가 처리하는 요소의 범위는 callbackFn의 첫 호출 전에 설정됩니다. every 호출 이후로 배열에 추가하는 요소는 callbackFn이 방문하지 않습니다. 배열에 존재하는 요소가 변경된 경우, callbackFn에 every가 방문하는 시점의 값을 전달합니다. 삭제한 요소는 방문하지 않습니다.
every는 (이산)수학에서 전칭(∀) 정량자(quantifier, 한정자)처럼 행동합니다. 특히, 빈 배열에 대해서는 true를 반환합니다. (이는 공집합의 모든 요소가 어떠한 주어진 조건도 만족하는 공허한 참입니다.)
* MDN참고
역시나 복잡하다.
내가 이해한 것을 간단히 정리하자면,
배열에 있는 모든 원소가 하나라도 거짓이면 false를 결과값으로 내어 놓고, 모두 참이면 true값을 내어 놓는다.
사용 구문은 아래와 같다.
arr.every(callback(curentValue, index, array)[, thisArg])
every()에 대한 인자는 콜백(callback)함수와 옵션으로 thisArg가 들아간다.
callback함수: 함수 안에서 arr의 어떠한 상태 값을 확인 할 것인지에 대한 조건을 체크한다.
thisArg: callback함수를 실행할 때 this로 사용하는 값이다.
이어서 callback함수에도 3개의 인자(currentValue, index, array)가 들어가는데,
currentValue: 현재의 요소. 즉, 배열안에 원소를 이야기하고
index: 현재 요소의 순서. 즉, 배열안에서 순서를 의미한다.(컴퓨터는 0부터 순서를 센다.)
array: 대상 배열을 말한다.
백문이 불여일타라고 했다.
바로 예시를 살펴 보자.
let 배열01 = [1,2,3,4];
// -----------------------------
// -----------------------------
let 확인03 = 배열01.every(
function(el, index, 배열01){
return el < 4;
}
);
console.log(확인03); // false
// -----------------------------
// -----------------------------
let 확인04 = 배열01.every(
function(el, index, 배열01){
return el < 5;
}
);
console.log(확인04); // true
// -----------------------------
위 코드에서 element가 10보다 크거나 같을 때 true, 하나라도 틀리면 false이다.
다음 예제는 내용이 조금 업그레이드가 되었다.
const isSubset = (array1, array2) => array2.every((element) => array1.includes(element));
console.log(isSubset([1, 2, 3, 4, 5, 6, 7], [5, 7, 6])); // true
console.log(isSubset([1, 2, 3, 4, 5, 6, 7], [5, 8, 7])); // false
위 코드는 어떤 배열의 모든 요소가 또 다른 배에 존재하는지 여부를 확인해주는 예시이다.
이 every() 메소드는 어떤 대용량의 데이터에서 조건에 맞는 데이터가 잘 뽑혔는지 확인 할 때 사용하면 좋을 것 같아보인다.
비슷한 기능을 하는 some()이라는 메소드도 있다.
반응형
LIST