IT/Javascript

배열에 주로 쓰이는 filter 메서드와 find 메서드 그리고 includes메서드 [javascript]

KeepGooing 2021. 1. 24. 21:11
반응형

두 함수 모두

Array.prototype의

메서드이다.

 

filter

 주어진 함수 테스트를 통과하는 모든 요소를 모아 새로운 배열로 반환

developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

 

Array.prototype.filter() - JavaScript | MDN

filter() 메서드는 주어진 함수의 테스트를 통과하는 모든 요소를 모아 새로운 배열로 반환합니다. The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive exampl

developer.mozilla.org

 

find

find() 메서드는 주어진 판별 함수를 만족하는 첫 번째 요소 을 반환

developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/find

 

Array.prototype.find() - JavaScript | MDN

find() 메서드는 주어진 판별 함수를 만족하는 첫 번째 요소의 값을 반환합니다. 그런 요소가 없다면 undefined를 반환합니다. The source for this interactive example is stored in a GitHub repository. If you'd like to c

developer.mozilla.org

 

 

n	lost	reserve	   return
5	[2, 4]	[1, 3, 5]	5
5	[2, 4]	[3]	4
3	[3]	[1]	2


function solution(n, lost, reserve) {  
    
    const temp = lost.filter(l => {
        const f = reserve.find(r => Math.abs(r-l) == 1)
        if(!f) return true
        reserve = reserve.filter(r => r !== f)
    });
    
 return n - temp.length

}

출쳐 : [프로그래머스 문제 및 좋아요 숫자를 제일 많이 받은 해답 내용 참고]

 

filter와 find를 잘 활용하면 긴 코드를 위와 같이 짧게 줄여 활용할 수 있다.

 

핵심은 비교 되는 배열의 원소끼리 절대값이 1이 되는 학생의 숫자를 파악하는 것.

이 과정에서 중복되는 것을 filter 와 find 메서드를 절차적으로 적절히 위치시켜 중복 처리 함.

 

배울 점이 많아 포스팅

 

 

includes

includes() 메서드는 배열이 특정 요소를 포함하고 있는지 판별

 

developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/includes

 

Array.prototype.includes() - JavaScript | MDN

includes() 메서드는 배열이 특정 요소를 포함하고 있는지 판별합니다. The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://githu

developer.mozilla.org

 

 

function solution(n, lost, reserve) {
    const realReserve = reserve.filter(r => !lost.includes(r));
    const realLost = lost.filter(r => !reserve.includes(r));

    const ableNum = realLost.filter(a => {
        return realReserve.find((b, i) => {
            const has = b === a-1 || b === a+1;
            if (has) {
                delete realReserve[i];
            }
            return has;
        });
    }).length;
    return n - (realLost.length - ableNum);
}

 

프로그래머스의 해답 중 하나를 갖고왔습니다.

 

두 번째 해답 코드이다

includes를 활용하여 프로그래밍하였는데 

위 코드는 정확성에서 좋지못한 점수를 받았고

이번 코드는 100점 받아

추가로 해답 코드를 올린다.

더불어

delete 연산자를 사용했는 데 이는 배열이 아닌 객체에 쓰는 것이라고 정의하지만

developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/delete

 

delete 연산자 - JavaScript | MDN

delete 연산자는 객체의 속성을 제거합니다. 제거한 객체의 참조를 어디에서도 사용하지 않는다면 나중에 자원을 회수합니다. The source for this interactive example is stored in a GitHub repository. If you'd like to

developer.mozilla.org

delete 연산자는 객체의 속성을 제거 및 배열에서도 작동하는 것을 확인 이유는 배열 또한 객체이므로

 

 

const array1 = [5, 8, 130, 44];

delete array1[0]

console.log(array1)




결과
 Array [undefined, 8, 130, 44]

 

 

 

최종적으로 

이둘을 합쳐 해답을 내면 

다음과 같이 할 수 있다.

 

 

 

function solution(n, lost, reserve) {
    let realReserve = reserve.filter(r => !lost.includes(r));
    let realLost = lost.filter(r => !reserve.includes(r));

    // const reserveNum = reserve.lenght - realReserve.length;

       const temp = realLost.filter(l => {
        const f = realReserve.find(r => Math.abs(r-l) == 1)
        if(!f) return true
        realReserve = realReserve.filter(r => r !== f)
    });
    
 return n - temp.length
}

 

반응형