[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] 배열에서 연속적인 숫자 뽑아내기  (1) 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)
  • 태그

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

티스토리툴바