iDrax
iDrax

Reputation: 29

Why the script separates a whole multi-digits number to separated numbers?

I have a problem in this code. When i run it, and after that i insert a two digits number, the script separates it. Ex.: enter 12 shows 1 even and 1 odd; enter 26 shows 2 even; I want it to be mixed, so if i enter a two digits number or more (ex.432152) that needs to be 1 sum, 1 value, and show as 1 even number. Thank you for the opportunity to ask for help here!

function countfromzero() {
  if (document.getElementById("maintextbox").value !="") {
    CalculateNumbers();
  }
}

function CalculateNumbers() {
  var arr = [];
  var asd = 0;
  var evn = 0;
  arr = document.getElementById("maintextbox").value;
  arr = arr.replace(/, | /g, "");
  for (i = 0; i < arr.length; i++) {
    if (arr[i] % 2 != 0) {
      asd++;
    }
    else {
      evn++;
    }
  }
  document.getElementById("eventextbox").value = evn;
  document.getElementById("oddtextbox").value = asd;
}
<input type="text" name="maintextbox" id="maintextbox">
<input type="button" id="buttton" name="Process" value="Process" onclick="countfromzero();"><br>
Even:<input type="text" name="eventextbox" id="eventextbox"><br>
Odd:<input type="text" name="oddtextbox" id="oddtextbox">

Upvotes: 0

Views: 38

Answers (2)

D.Schaller
D.Schaller

Reputation: 651

Consider HerrSerker's Answer since it's optimized to allow sequences of numbers, while mine doesn't



You treated your number as an array, and your for-loop iterated through each digit in your number to check if it's even or odd.

You just have to get rid of the loop, and change your "arr" to not be an array anymore.

function countfromzero() {
  if (document.getElementById("maintextbox").value != "") {
    CalculateNumbers();
  }
}

function CalculateNumbers() {
  var arr;
  var asd = 0;
  var evn = 0;
  arr = document.getElementById("maintextbox").value;
  arr = arr.replace(/, | /g, "");
  if (arr % 2 != 0) {
    asd++;
  } else {
    evn++;
  }
  document.getElementById("eventextbox").value = evn;
  document.getElementById("oddtextbox").value = asd;
}
<input type="text" name="maintextbox" id="maintextbox">
<input type="button" id="buttton" name="Process" value="Process" onclick="countfromzero();"> Even:
<input type="text" name="eventextbox" id="eventextbox"> Odd:
<input type="text" name="oddtextbox" id="oddtextbox">

Upvotes: 0

yunzen
yunzen

Reputation: 33439

Your arr variable is not an array as you apparently wanted it to be. Change the replace method to a split method (with a slightly different RegEx) and you are done

function countfromzero() {
  if (document.getElementById("maintextbox").value !="") {
    CalculateNumbers();
  }
}

function CalculateNumbers() {
  var arr = [];
  var asd = 0;
  var evn = 0;
  var str = document.getElementById("maintextbox").value;
  arr = str.split(/[^\d]+/g);
  for (i = 0; i < arr.length; i++) {
    if (arr[i] % 2 != 0) {
      asd++;
    }
    else {
      evn++;
    }
  }
  document.getElementById("eventextbox").value = evn;
  document.getElementById("oddtextbox").value = asd;
}
<input type="text" name="maintextbox" id="maintextbox" value="432152">
<input type="button" id="buttton" name="Process" value="Process" onclick="countfromzero();"><br>
Even:<input type="text" name="eventextbox" id="eventextbox"><br>
Odd:<input type="text" name="oddtextbox" id="oddtextbox">

Upvotes: 1

Related Questions