참 값과 거짓 값을 모두 포함하는 요소 배열이 있습니다. 우리의 임무는 원래 배열에서 NaN인 요소의 인덱스가 있는 배열을 반환하는 함수를 작성하는 것입니다.
NaN !==NaN
NaN의 데이터 유형은 실제로 숫자입니다. NaN은 거짓 값이지만 다른 데이터 유형이나 변수에는 없는 고유한 속성이 있습니다. NaN ===NaN은 false를 산출한다는 것입니다. 그리고 NaN의 경우에만 거짓입니다.
그래서 우리는 이 동작을 우리의 장점에 사용할 수 있고 NaN 값 인덱스를 선택할 수 있습니다. 이에 대한 코드는 -
const arr = [7, 1, "123abc", undefined, NaN, 78, NaN, null, "aes", NaN, '', null, NaN]; const pickNaN = (arr) => { return arr.reduce((acc, val, ind) => { if(val !== val){ acc.push(ind); }; return acc; }, []); }; console.log(pickNaN(arr));
isNaN() / Number.isNaN() 사용
isNaN() 함수는 제공된 값이 NaN인지 또는 NaN으로 강제 변환될 수 있는지 여부에 따라 true 또는 false를 반환합니다. Number.isNaN() 함수는 제공된 값이 실제로 NaN인 경우에만 true를 반환합니다.
따라서 Number.isNaN()은 isNaN()보다 NaN을 확인하는 신뢰할 수 있는 방법입니다. 코드 출력의 차이점은 다음과 같습니다.
예
const arr = [7, 1, "abc", undefined, NaN, 78, NaN, null, "aes", NaN, '', null, NaN]; const pickNaN = (arr) => { return arr.reduce((acc, val, ind) => { if(Number.isNaN(val)){ acc.reliableWay.push(ind); }; if(isNaN(val)){ acc.unreliableWay.push(ind); } return acc; }, { reliableWay: [], unreliableWay: [] }); }; console.log(pickNaN(arr));
이 코드는 두 개의 배열을 준비합니다. 하나는 Number.isNaN()을 사용하고 다른 하나는 isNaN()을 사용합니다.
출력
출력은 -
{ reliableWay: [ 4, 6, 9, 12 ], unreliableWay: [ 2, 3, 4, 6, 8, 9, 12] }
isNaN()이 NaN이 아닌 많은 값을 NaN으로 계산하는 방법을 명확하게 볼 수 있습니다. 그렇기 때문에Number.isNaN()이 더 안정적인 방법입니다.