简体   繁体   中英

When I add the second input, it shows undefined for both in alert box

Not sure if the mistake is in the viewData() function.

  var list = {
  firstName: [],
  lastName: [],
  maximumHeartRate: [],
  restingHeartRate: [],
  age: [],
  gender: []
}

alert("Welcome to the VO2 Max Categorisation App.");

function validate(string) {
  var stringToVal = prompt(string);
  var range = new RegExp("^[a-zA-Z]{2,}$");
  while (range.test(stringToVal) == false || stringToVal == "" || stringToVal == null ) {
    stringToVal = prompt(string);
  }
  return stringToVal
}

function validateNumber(numToVal, min, max){
  var askUser = Number(prompt(numToVal))
  while (isNaN(askUser) || askUser < min || askUser > max || askUser == '' || askUser == null) {
      askUser = Number(prompt("Please enter a number between " + min + " & " + max + "." )); 
  }
  return askUser
}

function addData(list) {
   var userFirstName = validate("First name of user?"); 
   var userLastName = validate("Last name of user?");
   var userGender = validate("Gender of user?");
   var userAge = validateNumber("Please enter an age between 20 - 39!",20,39);
   var MHR = validateNumber("Enter maximum heart rate of user",30,200);
   var RHR = validateNumber("Enter resting heart rate of user",30,200 );

   list.firstName.push(userFirstName);
   list.lastName.push(userLastName);
   list.gender.push(userGender);
   list.age.push(userAge);
   list.maximumHeartRate.push(MHR);
   list.restingHeartRate.push(RHR);

}

This function asks the user and pushes everything into the list

function calculateVO2Max(list) {
  var VO2Max = 15.3 * (list.maximumHeartRate / list.restingHeartRate);
  return VO2Max;
}

This calculates VO2Max

function VO2MaxCategorisation(Gender,Age,VO2Max) {
  if (Gender == "Female" && Age >= 20 && Age <= 29 && VO2Max < 31) {
    return("Low");
  } else if (Gender == "Female" && Age >= 20 && Age <= 29 && (VO2Max >= 31 && VO2Max <=34) ) {
    return("Fair");
  } else if (Gender == "Female" && Age >= 20 && Age <= 29 && (VO2Max >= 35 && VO2Max <= 37)) {
    return("Average");
  } else if (Gender == "Female" && Age >= 20 && Age <= 29 && (VO2Max >= 38 && VO2Max <= 41)) {
    return("Good");
  } else if (Gender == "Female" && Age >= 20 && Age <= 29 && VO2Max > 41) {
    return("High");
  }


  if (Gender == "Female" && Age >= 30 && Age <= 39 && VO2Max < 29) {
    return("Low");
  } else if (Gender == "Female" && Age >= 30 && Age <= 39 && (VO2Max >= 29 && VO2Max <= 32)) {
    return("Fair");
  } else if (Gender == "Female" && Age >= 30 && Age <= 39 && (VO2Max >= 33 && VO2Max <= 35)) {
    return("Average");
  } else if (Gender == "Female" && Age >= 30 && Age <= 39 && (VO2Max >= 36 && VO2Max <= 39)) {
    return("Good");
  } else if (Gender == "Female" && Age >= 30 && Age <= 39 && VO2Max > 39) {
    return("High");
  }


  if (Gender == "Male" && Age >= 20 && Age <= 29 && VO2Max < 37) {
    return("Low");
  } else if (Gender == "Male" && Age >= 20 && Age <= 29 && (VO2Max >= 37 && VO2Max <= 41)) {
    return("Fair");
  } else if (Gender == "Male" && Age >= 20 && Age <= 29 && (VO2Max >= 42 && VO2Max <= 44)) {
    return("Average");
  } else if (Gender == "Male" && Age >= 20 && Age <= 29 && (VO2Max >= 45 && VO2Max <= 48)) {
    return("Good");
  } else if (Gender == "Male" && Age >= 20 && Age <= 29 && VO2Max > 48) {
    return("High");
  }


  if (Gender == "Male" && Age >= 30 && Age <= 39 && VO2Max < 35) {
    return("Low");
  } else if (Gender == "Male" && Age >= 30 && Age <= 39 && (VO2Max >= 35 && VO2Max <= 39)) {
    return("Fair");
  } else if (Gender == "Male" && Age >= 30 && Age <= 39 && (VO2Max >= 40 && VO2Max <= 42)) {
    return("Average");
  } else if (Gender == "Male" && Age >= 30 && Age <= 39 && (VO2Max >= 43 && VO2Max <= 47)) {
    return("Good");
  } else if (Gender == "Male" && Age >= 30 && Age <= 39 && VO2Max > 47) {
    return("High");
  }

}

This function categorize

function viewData(list) {
  var string = ""
  for(var i = 0; i < list.firstName.length; i++) {
    string += (list.firstName[i] + " " + list.lastName[i] + ": " + VO2MaxCategorisation(list.gender[i],list.age[i],calculateVO2Max(list)) + "\n")
  }
  alert(string)
}

It shows undefined when 2 inputs are displayed in the alert box,but it shows the category of the user when only 1 put is displayed

function optionMenu(list) {
  while(true) {
  var optionChoice = Number(prompt("What do you want to do: \n 1)Enter data \n 2)View data \n 3)Exit"));
    if (optionChoice == 1) {
      addData(list);
    } else if (optionChoice == 2) {
      viewData(list);
    } else if (optionChoice == 3) {
      break;
    } else {
      alert("Sorry,choose from the options.");
    }
  }
}

This is the menu to choose

optionMenu(list);

You are initializing string to '' in every call to viewData.

place string outside of viewData context and make it global.

https://jsbin.com/sukuyeguzu/edit?html,js,output

 var list = {
  firstName: [],
  lastName: [],
  maximumHeartRate: [],
  restingHeartRate: [],
  age: [],
  gender: []
}
 var string = "";



alert("Welcome to the VO2 Max Categorisation App.");

function validate(string) {
  var stringToVal = prompt(string);
  var range = new RegExp("^[a-zA-Z]{2,}$");
  while (range.test(stringToVal) == false || stringToVal == "" || stringToVal == null ) {
    stringToVal = prompt(string);
  }
  return stringToVal
}

function validateNumber(numToVal, min, max){
  var askUser = Number(prompt(numToVal))
  while (isNaN(askUser) || askUser < min || askUser > max || askUser == '' || askUser == null) {
      askUser = Number(prompt("Please enter a number between " + min + " & " + max + "." )); 
  }
  return askUser
}

function addData(list) {
   var userFirstName = validate("First name of user?"); 
   var userLastName = validate("Last name of user?");
   var userGender = validate("Gender of user?");
   var userAge = validateNumber("Please enter an age between 20 - 39!",20,39);
   var MHR = validateNumber("Enter maximum heart rate of user",30,200);
   var RHR = validateNumber("Enter resting heart rate of user",30,200 );

   list.firstName.push(userFirstName);
   list.lastName.push(userLastName);
   list.gender.push(userGender);
   list.age.push(userAge);
   list.maximumHeartRate.push(MHR);
   list.restingHeartRate.push(RHR);

}

function calculateVO2Max(list) {
  var VO2Max = 15.3 * (list.maximumHeartRate / list.restingHeartRate);
  return VO2Max;
}

function VO2MaxCategorisation(Gender,Age,VO2Max) {
  if (Gender == "Female" && Age >= 20 && Age <= 29 && VO2Max < 31) {
    return("Low");
  } else if (Gender == "Female" && Age >= 20 && Age <= 29 && (VO2Max >= 31 && VO2Max <=34) ) {
    return("Fair");
  } else if (Gender == "Female" && Age >= 20 && Age <= 29 && (VO2Max >= 35 && VO2Max <= 37)) {
    return("Average");
  } else if (Gender == "Female" && Age >= 20 && Age <= 29 && (VO2Max >= 38 && VO2Max <= 41)) {
    return("Good");
  } else if (Gender == "Female" && Age >= 20 && Age <= 29 && VO2Max > 41) {
    return("High");
  }


  if (Gender == "Female" && Age >= 30 && Age <= 39 && VO2Max < 29) {
    return("Low");
  } else if (Gender == "Female" && Age >= 30 && Age <= 39 && (VO2Max >= 29 && VO2Max <= 32)) {
    return("Fair");
  } else if (Gender == "Female" && Age >= 30 && Age <= 39 && (VO2Max >= 33 && VO2Max <= 35)) {
    return("Average");
  } else if (Gender == "Female" && Age >= 30 && Age <= 39 && (VO2Max >= 36 && VO2Max <= 39)) {
    return("Good");
  } else if (Gender == "Female" && Age >= 30 && Age <= 39 && VO2Max > 39) {
    return("High");
  }


  if (Gender == "Male" && Age >= 20 && Age <= 29 && VO2Max < 37) {
    return("Low");
  } else if (Gender == "Male" && Age >= 20 && Age <= 29 && (VO2Max >= 37 && VO2Max <= 41)) {
    return("Fair");
  } else if (Gender == "Male" && Age >= 20 && Age <= 29 && (VO2Max >= 42 && VO2Max <= 44)) {
    return("Average");
  } else if (Gender == "Male" && Age >= 20 && Age <= 29 && (VO2Max >= 45 && VO2Max <= 48)) {
    return("Good");
  } else if (Gender == "Male" && Age >= 20 && Age <= 29 && VO2Max > 48) {
    return("High");
  }


  if (Gender == "Male" && Age >= 30 && Age <= 39 && VO2Max < 35) {
    return("Low");
  } else if (Gender == "Male" && Age >= 30 && Age <= 39 && (VO2Max >= 35 && VO2Max <= 39)) {
    return("Fair");
  } else if (Gender == "Male" && Age >= 30 && Age <= 39 && (VO2Max >= 40 && VO2Max <= 42)) {
    return("Average");
  } else if (Gender == "Male" && Age >= 30 && Age <= 39 && (VO2Max >= 43 && VO2Max <= 47)) {
    return("Good");
  } else if (Gender == "Male" && Age >= 30 && Age <= 39 && VO2Max > 47) {
    return("High");
  }

}

function viewData(list) {
  for(var i = 0; i < list.firstName.length; i++) {
    string += (list.firstName[i] + " " + list.lastName[i] + ": " + VO2MaxCategorisation(list.gender[i],list.age[i],calculateVO2Max(list)) + "\n")
  }
  alert(string)
}

function optionMenu(list) {
  while(true) {
  var optionChoice = Number(prompt("What do you want to do: \n 1)Enter data \n 2)View data \n 3)Exit"));
    if (optionChoice == 1) {
      addData(list);
      viewData(list);
    } else if (optionChoice == 2) {
      viewData(list);
    } else if (optionChoice == 3) {
      break;
    } else {
      alert("Sorry,choose from the options.");
    }
  }
}

optionMenu(list);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM