const range = (start, stop, step) =>
Array.from({ length: (stop - start) / step 1 }, (_, i) => start i * step);
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from
var passwordLength = window.prompt('Please choose a password length between 8 and 128 characters:');
const valid_lengths = range(8,128,1);
// Gives: [8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128]
while ( !valid_lengths.includes(passwordLength) ){
var passwordLength = window.prompt('Invalid input. Please try again. Please input a password length that is an integer between 8 and 128 characters:');
}
console.log("The valid passwordLength is: " passwordLength);
It seems that the code cannot break out of the while loop even if the user enters a passwordLength that is included in the array, such as 33
, (when the while condition fails, we expect the code to break out of the while loop). Where is my logic failing here?
I have tried inputs to the passwordLength prompt that are both included 8, 33, 44, 120, and not included 1, 0, 150, in the given array - but the while loop persists regardless.
CodePudding user response:
The return value of window.prompt
is string.
( https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt#return_value )
Therefore, you need to cast it to number.
For example,
var passwordLengthStr = window.prompt('...');
var passwordLength = parseInt(passwordLengthStr);
CodePudding user response:
const range = (start, stop, step) =>
Array.from({ length: (stop - start) / step 1 }, (_, i) => start i * step);
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from
var passwordLength = window.prompt('Please choose a password length between 8 and 128 characters:');
const valid_lengths = range(8,128,1);
// Gives: [8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128]
while ( !valid_lengths.includes( passwordLength) ){
passwordLength = window.prompt('Invalid input. Please try again. Please input a password length that is an integer between 8 and 128 characters:');
}
console.log("The valid passwordLength is: " passwordLength);
;)