[JavaScript] every, some

2023. 1. 12. 13:50·JavaScript
반응형

알고리즘 문제를 풀다가 Array의 every와 some에 대해서 알게 되었다. 

 

every 

배열의 모든 요소가 특정 조건을 충족하는지 확인한다. 

const array = [10, 20, 30, 40, 50];

const result1 = array.every(num => num < 30);
console.log(result1) // false

const result2 = array.every(num => num >= 10);
console.log(result2) // true

인자로 특정 조건을 확인하는 callback 함수를 전달한다. 

이때 배열의 모든 요소가 해당 조건을 충족한다면 true / 아니라면 false가 리턴된다. 

 

some 

배열의 1개의 요소라도 특정 조건을 충족하는지 확인한다. 

const array = [10, 20, 30, 40, 50];

const result1 = array.some(num => num < 30);
console.log(result1) // true

const result2 = array.some(num => num >= 10);
console.log(result2) // true

every와 마찬가지고 특정 조건을 확인하는 callback 함수를 전달한다. 

이때 배열의 1개의 요소라도 조건을 충족한다면 true / 전부 충족하지 않는다면 false가 리턴된다. 

 

어떤 경우에 사용할까? 

바로 어제 작성한 숫자 카드 나누기 문제에서 every와 some을 사용하면 좀 더 깔끔하게 작성이 가능하다. 

( 깔끔하다의 차이지 실제 수행 자체는 동일 ) 

function getMaxValue (max, arrayA,arrayB) {
    for(let i = max; i > 0; i-- ) {
        let isOk = true;
        for(let j = 0; j < arrayA.length; j++) {
            const numA = arrayA[j];
            const numB = arrayB[j];

            if(numA % i !== 0 || numB % i === 0) {
                isOk = false;
                break;
            }
        }

        if(isOk) {
            return i
        }
    }
    
    return 0;
}

다음과 같이 코드가 있다고 생각하자 

for(let j = 0; j < arrayA.length; j++) {
    const numA = arrayA[j];
    const numB = arrayB[j];

    if(numA % i !== 0 || numB % i === 0) {
        isOk = false;
        break;
    }
}

잘 보면 앞서 배운 some과 every가 보인다. 

numA의 경우 i와 나누면 무조건 0이 나와야 하고,

numB의 경우는 i와 나누면 하나라도 0이 나오면 안된다.

 

그렇다면 every와 some을 사용해서 리팩토링해보자!

function getMaxValue (max, arrayA,arrayB) {
    for(let i = max; i > 0; i--) {
        if(arrayA.every(num => num % i === 0) && !arrayB.some(num => num % i === 0)) return i;
    }
    
    return 0;
}

numA와 numB를 각각 every와 some 사용해서 계산했다. 

 

다음과 같이 사용할 수 있지만, 이것은 성능상 이점이 있는 것이 아닌 가독성을 위한 방법이다. 

이것을 사용하더라도 성능상 이점은 없고 똑같이 for문을 사용한다는 것은 알아두자!

반응형
저작자표시 비영리 변경금지 (새창열림)

'JavaScript' 카테고리의 다른 글

[JavaScript] ??와 || 의 차이  (0) 2023.04.09
[JavaScript] then vs Async/Await  (0) 2023.01.27
[JavaScript] 재귀함수 vs 반복문  (1) 2022.12.29
[JavaScript] 배열에서 연속적인 숫자 뽑아내기  (0) 2022.12.22
[JavaScript] 함수형 프로그래밍 - 함수형으로 전환하기_1  (0) 2022.11.13
'JavaScript' 카테고리의 다른 글
  • [JavaScript] ??와 || 의 차이
  • [JavaScript] then vs Async/Await
  • [JavaScript] 재귀함수 vs 반복문
  • [JavaScript] 배열에서 연속적인 숫자 뽑아내기
잉여개발자
잉여개발자
풀스택 개발자를 목표로 잉여롭게 개발 공부도 하면서 다양한 취미 생활도 즐기고 있는 잉여 개발자입니다.
  • 잉여개발자
    잉여로운 개발일지
    잉여개발자
    • 분류 전체보기 (789)
      • 개발정보 (36)
      • 개발환경 (7)
      • 개발생활 (19)
      • React (141)
        • 이론 (23)
        • 기능 (12)
        • 실험실 (88)
        • 버그 (6)
        • 패스트캠퍼스 (9)
        • Npm (3)
      • React Native (28)
        • 공통 (6)
        • TypeScript (3)
        • JavaScript (18)
        • 버그 (1)
      • Next.js (30)
        • 이론 (13)
        • 실험실 (13)
        • 버그 (3)
      • Web (35)
      • 알고리즘 (202)
        • 풀이 힌트 (39)
      • JavaScript (47)
      • TypeScript (29)
        • 기초 (27)
        • 실험실 (2)
      • Node.js (13)
        • 이론 (0)
        • 기능 (3)
        • 실험실 (9)
        • 버그 (1)
      • 도커 (4)
      • CCNA (22)
        • 이론 (4)
        • 문제 (18)
      • 취미생활 (167)
        • 잉여로운 칵테일 (2)
        • 잉여의 식물키우기 (130)
        • 잉여로운 여행기 (11)
        • 잉여의 제2외국어 (21)
        • 잉여로운 책장 (2)
      • Java (1)
        • Java의 정석 (1)
      • 꿀팁 공유 (3)
  • 태그

    리액트
    webpack
    리얼학습일기
    덤프
    바질 키우기
    next.js
    Babel
    타일러영어
    식물
    바질
    알고리즘
    자바스크립트
    typescript
    영어회화
    javascript
    CSS
    ChatGPT
    Node.js
    프로그래머스
    다이소
    ReactNative
    타입스크립트
    리얼클래스
    네트워크
    CCNA
    영어독학
    네이버 부스트캠프
    Docker
    redux
    react
  • hELLO· Designed By정상우.v4.10.1
잉여개발자
[JavaScript] every, some
상단으로

티스토리툴바