let args: string[] = process.argv.slice(2);
console.log(`All arguments: ${args}`);
let numbers: number[] = saveNumbers();
console.log(`All Numbers: ${numbers}`);
console.log(`1st argument < 10: ${firstNumberFullfill(numbers,x => x < 10)}`);
console.log(`1st argument > 10: ${firstNumberFullfill(numbers,x => x > 1000)}`);
console.log(`1st not numerical argument: ${firstNumberFullfill(args,x => isNaN(x))}`);
function saveNumbers():number[]{
let nums: number[] = [];
for(let a of args){
let num = parseInt(a);
if(isNaN(num) == false){
console.log(a)
nums.push(parseInt(a));
}
}
return nums;
}
function firstNumberFullfill(array: Array<any>,checkFunc: (num: number) => boolean):number|string{
for(let a of array){
if(checkFunc(a)){
return a;
}
}
return "no number found";
}
My IsNaN says "12ab" is a number but at the first Non-Number argument its the first non-number, i used the isNaN function twice so idk why it doesnt work
CodePudding user response:
You're not comparing the same values here: the first check (saveNumbers
) tests isNaN(parseInt("12ab"))
while the second tests isNaN("12ab")
.
saveNumbers
will parse "12ab" and return 12, which is a number and not NaN
, while isNaN("12ab")
will show that the String you pass is indeed NaN
.