배열 안의 요소가 하나라도 해당될 때 함수 실행하기

KeyEun Lee·2023년 12월 9일
0

20231209 TIL

요구사항

  • 지금 함수가 최선입니까? 컴퓨팅 자원을 낭비하지 않을 방법을 고민해보세요.
function parseAndDecodeArray(data) {
    let parsedArray = JSON.parse(data);

    return parsedArray.map(item => {
        if (/\\u[\da-fA-F]{4}/.test(item)) {
            return item.replace(/\\u([\da-fA-F]{4})/g, (_, unicode) => 
                String.fromCharCode(parseInt(unicode, 16))
            );
        }
        return item;
    });
	}

Solution: .some()과 .test()

  • 함수를 최적화하여 정규식 사용을 최소화하거나, 데이터에 유니코드 이스케이프 시퀀스가 포함되어 있지 않은 경우 불필요한 처리를 피하자!
function parseAndDecodeArray(data) {
    let parsedArray = JSON.parse(parsedArray)
    // Check if the array contains any Unicode strings before applying map
    const containsUnicode = parsedArray.some(item => /\\u[\da-fA-F]{4}/.test(item));
    if (!containsUnicode) return parsedArray;

    return parsedArray.map(item => {
        return item.replace(/\\u([\da-fA-F]{4})/g, (_, unicode) => 
            String.fromCharCode(parseInt(unicode, 16))
        );
    });
}
  • .some(): 배열 안의 어떤 요소라도 주어진 판별 함수를 적어도 하나라도 통과하는지 테스트. '적어도 하나'라도 참인 값을 반환하면 true를 반환하는게 포인트!
  • 정규식.test(확인할 문자열): 주어진 문자열이 정규 표현식을 만족하는지 판별하고, 그 여부를 true 또는 false로 반환.

Takeaway

  • Computing resource를 절약하기 위해서는, 굳이 array 요소를 하나하나 돌면서 replace 실행하기 전에(map) replace가 진짜 필요한지 (=유니코드 문자가 포함되어있는지) 확인하는 과정이 필요하다.
profile
느리지만 꾸준히 공부합니다 https://keyeun.com/

0개의 댓글