Home > Mobile >  Cannot break out of the while loop even when condition failed
Cannot break out of the while loop even when condition failed

Time:11-27

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);

;)

  • Related