Почему скрипт разделяет целое многозначное число на отдельные числа?

У меня проблема в этом коде. Когда я запускаю его и после этого вставляю двухзначный номер, скрипт разделяет его. Пример: введите 12, покажет 1 четный и 1 нечетный; введите 26 показывает 2 четных; Я хочу, чтобы он был смешанным, поэтому, если я введу двухзначное число или более (например, 432152), это должно быть 1 сумма, 1 значение и отображаться как 1 четное число. Спасибо за возможность обратиться за помощью здесь!

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">

Вы имеете в виду: ввод 432152 должен давать результаты: 1 четный и 0 нечетный?

yunzen 19.10.2018 09:50
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
33
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Рассмотрим ответ HerrSerker, поскольку он оптимизирован для поддержки последовательностей чисел, а мой - нет.



Вы рассматривали свой номер как массив, и ваш for-loop перебирал каждую цифру в вашем номере, чтобы проверить, четное оно или нечетное.

Вам просто нужно избавиться от цикла и изменить "arr", чтобы он больше не был массивом.

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">
Ответ принят как подходящий

Ваша переменная arr не является массивом, как вы, очевидно, хотели. Измените метод replace на метод split (с немного другим RegEx), и все готово.

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">

Спасибо вам, ребята! В этом случае я могу добавить многозначные числа и порядковые номера, чтобы определить, четное или нечетное число!

iDrax 19.10.2018 10:25

Другие вопросы по теме