简体   繁体   English

验证数字数据Javascript

[英]Validation for numeric data Javascript

I'm writing a program in Javascript that separates even and odd numbers, puts them into an array, adds the sum of numbers, and finds the average. 我正在用Javascript编写一个程序,它将偶数和奇数分开,将它们放入一个数组中,加上数字的总和,然后找出平均值。

I'm having an issue not allowing zeros not to count. 我有一个问题,不允许零点不计算。 Because its adding to the array, and when the user types in 6+6 , sum is 12 , average is calculating to 4 because of the extra 0 in the array. 因为它添加到数组中,当用户键入6+6 ,sum为12 ,由于数组中的额外0 ,平均值计算为4

Is there anyway to not allow the zeros to count? 无论如何不允许零计数? Here is what I have so far.. 这是我到目前为止...

var evenarray = [];
    var oddarray = [];
    var avgEven = 0;
    var avgOdd = 0;
    var isValid;
    function numberFunction(){

        do  
        {

            var numbers = prompt("Please enter numbers. Enter empty string to exit.");

            if(numbers % 2 == 0)
            {   
                    evenarray.push(numbers);
                    var sumEven = 0;
                        for (var i=0; i < evenarray.length; i++)
                        {
                            sumEven = sumEven + Number(evenarray[i]);
                        }
                    var avgEven = sumEven/evenarray.length;
                    //alert("even");

            }
            if(numbers % 2 !== 0)
            {
                    oddarray.push(numbers);
                    var sumOdd = 0;
                        for (var i=0; i < oddarray.length; i++)
                        {
                            sumOdd = sumOdd + Number(oddarray[i]);
                        }
                    var avgOdd = sumOdd/oddarray.length;
                    //alert("odd");
            }

            //if(isNaN(numbers)){

                //alert("Only numeric data only");
                //}
        }

        while(numbers !== "");

Just do nothing when the number is actually 0 : 当数字实际为0时,什么都不做:

if (numbers == 0)
{
}
else if(numbers % 2 == 0)
{   
  evenarray.push(numbers);
  var sumEven = 0;
  for (var i=0; i < evenarray.length; i++)
  {
    sumEven = sumEven + Number(evenarray[i]);
  }
  var avgEven = sumEven/evenarray.length;
}
else  // only odds remain
{
  oddarray.push(numbers);
  var sumOdd = 0;
  for (var i=0; i < oddarray.length; i++)
  {
    sumOdd = sumOdd + Number(oddarray[i]);
  }
  var avgOdd = sumOdd/oddarray.length;
}

You can do : 你可以做 :

if(numbers % 2 == 0 && numbers !=0) ...
if(numbers % 2 != 0 && numbers !=0) ...

so that you don't do anything when numbers == 0; 所以当数字== 0时你不做任何事情;

It's a little strange to call your variable numbers instead of number . 这是一个有点怪调用,而不是数量的变量

your function should be, 你的功能应该是,

function numberFunction(){

    do  
    {
        var numbers = prompt("Please enter numbers. Enter empty string to exit.");
        if(numbers !=0 && !isNaN(numbers)) 
            (numbers %2 == 0)? (evenarray.push(parseInt(numbers))) : (oddarray.push(parseInt(numbers)));
    }while(numbers !== "");

    for(var i = 0; i < evenarray.length; i++)
        sumEven += evenarray[i];

    for(var i = 0; i < oddarray.length; i++)
        sumOdd += oddarray[i];

    avgEven = sumEven / evenarray.length;
    avgOdd = sumOdd / oddarray.length;

document.getElementById("even").innerHTML = evenarray.toString();
document.getElementById("sumEvenTotal").innerHTML = sumEven.toString(); //displays sum of even numbers.
document.getElementById("averageOdd").innerHTML = avgOdd; //displays average of odd numbers.
document.getElementById("averageEven").innerHTML = avgEven; //diplays average of even numbers.
document.getElementById("odd").innerHTML = oddarray.toString(); //displays all odd numbers that were entered.
document.getElementById("sumOddTotal").innerHTML = sumOdd.toString();
}

As you already have other answers with solutions to your particular issue, I would suggest a different approach. 由于您已经有针对特定问题的解决方案的其他答案,我建议采用不同的方法。 Think of the data you're manipulating: an array. 想想你正在操纵的数据:一个数组。 Try to solve the issue only with data, no user input, no DOM manipulation; 尝试只用数据解决问题,没有用户输入,没有DOM操作; just data. 只是数据。 This helps to separate concerns, and make your code easier to understand. 这有助于区分问题,并使您的代码更易于理解。

Since we're working with arrays, we can make use of some of the built-in JavaScript methods that are present in modern browsers, such as filter and reduce . 由于我们正在使用数组,因此我们可以使用现代浏览器中存在的一些内置JavaScript方法,例如filterreduce These methods are in a way, alternatives to for loops, with some pre-defined behavior, and a callback function. 这些方法在某种程度上是for循环的替代方案,具有一些预定义的行为和回调函数。

Now, let's think of the steps involved in solving your problem. 现在,让我们考虑解决问题所涉及的步骤。

  1. Get numbers from the user. 从用户那里获取数字。 We can represent this data as an array, as you were already doing. 我们可以将此数据表示为数组,就像您已经在做的那样。
  2. We want all odd numbers, their sum and average. 我们想要所有奇数,它们的总和和平均数。
  3. We want all even numbers, their sum and average. 我们想要所有偶数,它们的总和和平均数。
  4. We display the data to the user. 我们向用户显示数据。

In this solution I'm assuming you already have an array with the data, and will be focusing on points 2 and 3. Remember, think of data, user interaction shouldn't be mixed with your data logic. 在这个解决方案中,我假设你已经拥有了一个包含数据的数组,并将重点关注第2点和第3点。请记住,考虑数据,用户交互不应与数据逻辑混合。 Instead of asking the user for a number on each loop, you could ask the user for a list of numbers directly; 您可以直接向用户询问数字列表,而不是向用户询问每个循环上的数字。 you avoid multiple prompts this way, and it lets you separate data and interaction nicely. 您可以通过这种方式避免多个提示,并且可以很好地分离数据和交互。 Ideally you'd validate all user input to match your requirements. 理想情况下,您将验证所有用户输入以符合您的要求。

// Helpers to work with numbers
var odd = function(x) {
  return x % 2 === 0;
};

var even = function(x) {
  return x % 2 !== 0;
};

var add = function(x, y) {
  return x + y;
};

function solve(ns) {
  // Solve the problem
  // with odd or even numbers
  var result = function(fn) {
    var xs = ns.filter(fn); // odd or even
    var sum = xs.reduce(add);
    return {
      numbers: xs,
      sum: sum,
      average: sum / xs.length
    };
  };
  // Return an object
  // with odd and even results
  return {
    odd: result(odd),
    even: result(even)
  };
}

var numbers = [1,2,3,4]; // from user input
var result = solve(numbers);

console.log(result.odd);
//^ {numbers: [2,4], sum: 6, average: 3}

console.log(result.even);
//^ {numbers: [1,2], sum: 4, average: 2}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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