여러 개의 키를 가진 객체를 입력받아, 그 안에 있는 모든 거짓(falsy) 값들을 대시('-')로 교체하는 함수를 작성해 보겠습니다. 원본 객체를 순회하면서 거짓 값을 가진 키를 찾아내고, 추가적인 메모리를 소비하지 않는(in-place) 방식으로 해당 값을 '-'로 바꿔주면 됩니다.
falsy 값이란?
JavaScript에서 조건문이나 논리 부정 연산자(!)를 적용했을 때 false로 평가되는 값은 다음과 같습니다.
nullundefined- 빈 문자열
'' 0,-0NaN
따라서 이번 예제에서는 null뿐만 아니라 위에 나열된 모든 falsy 값들이 '-'로 교체됩니다.
예제
const obj = {
key1: 'Hello',
key2: 'World',
key3: '',
key4: 45,
key5: 'can i use arrays',
key6: null,
key7: 'fast n furious',
key8: undefined,
key9: '',
key10: NaN,
};
const swapValue = (obj) => {
Object.keys(obj).forEach(key => {
if(!obj[key]){
obj[key] = '-';
}
});
};
swapValue(obj);
console.log(obj);코드 설명
Object.keys(obj)를 사용해 객체의 모든 키를 배열로 가져옵니다.forEach로 각 키를 순회하면서!obj[key]조건으로 falsy 여부를 검사합니다.- falsy 값인 경우 해당 키의 값을 '-'로 덮어씁니다. 새로운 객체를 생성하지 않으므로 추가 메모리가 필요 없습니다.
출력 결과
콘솔에 출력되는 결과는 다음과 같습니다.
{
key1: 'Hello',
key2: 'World',
key3: '-',
key4: 45,
key5: 'can i use arrays',
key6: '-',
key7: 'fast n furious',
key8: '-',
key9: '-',
key10: '-'
}실행 결과를 보면 key3(빈 문자열), key6(null), key8(undefined), key9(빈 문자열), key10(NaN)처럼 falsy로 평가되는 값들이 모두 '-'로 교체된 것을 확인할 수 있습니다. 반면 45와 같은 참(truthy) 값은 그대로 유지됩니다.