【问题标题】:How to add the input values of eight labels to an array, then get the prime numbers of the array? Javascript如何将八个标签的输入值添加到数组中,然后得到数组的素数? Javascript
【发布时间】:2015-08-14 19:43:19
【问题描述】:

我是 javascript 的新手,我想将 8 个标签(文本)的值放入 8 个数字的数组中,然后获取数组的质数,我可以制作数组,我可以设置html中有8个标签,但我不确定是否将这些值带到数组中。如果你能帮助我,那就太好了,谢谢!

我的求解器按钮的代码:

$('#btn1').click(function () {
    var primes = [true, true, true, true, true, true, true, true];

    var limit = Math.sqrt(8);

    for (var i = 1; i < 8; i++) {
        if (primes[i] === true) {
            for (var j = i * i; j < 8; j += i) {
                primes[j] = false;
            }
        }
    }

    for (var i = 1; i < 8; i++) {
        if (primes[i] === true) {
            console.log(i + " " + primes[i]);
        }
    }

});

标签代码:

<label>1. </label> <input id="input1" type="text"><br>
<label>2. </label> <input id="input2" type="text"><br>
<label>3. </label> <input id="input3" type="text"><br>
<label>4. </label> <input id="input4" type="text"><br>
<label>5. </label> <input id="input5" type="text"><br>
<label>6. </label> <input id="input6" type="text"><br>
<label>7. </label> <input id="input7" type="text"><br>
<label>8. </label> <input id="input8" type="text"><br>

【问题讨论】:

  • 什么是value?它似乎没有在您的代码中定义,是在您的点击处理程序范围之外定义的还是一个错字?
  • 对不起!值是数组大小中的“8”
  • 您将数组设为一个小的有限数 (8) 并循环这些值是否有特殊原因?第一个 var 和第一个 for 循环可以简化为 var primes = [,true,true,true,true,true,true,true]; 如果你真的确定你总是想要 8。否则可以考虑用变量替换 8。
  • 我明白了,我会按照你说的编辑它,谢谢,我仍然不知道如何通过“推送”将值发送到数组?但是然后呢?如何将数组调用到求解器函数? :(
  • "...用 'push' 将值发送到数组?"你的意思是:primes.push(newValue);

标签: javascript arrays


【解决方案1】:

检查数字是否为素数的代码(来自:https://stackoverflow.com/a/24094774/1013526):

function isPrime(n) {

   // If n is less than 2 or not an integer then by definition cannot be prime.
   if (n < 2) {return false}
   if (n != Math.round(n)) {return false}

   // Now assume that n is prime, we will try to prove that it is not.
   var isPrime = true;

   // Now check every whole number from 2 to the square root of n. If any of these divides n exactly, n cannot be prime.
   for (var i = 2; i <= Math.sqrt(n); i++) {
      if (n % i == 0) {isPrime = false}
   }

   // Finally return whether n is prime or not.
   return isPrime;

}

求解器按钮单击的代码:

$('#btn1').click(function () {
    var count = 8;   // in case you decide to change this later
    var primes = {}; // object instead of array

    for (var i = 1; i < count; i++) {
        var value = $('#input'+i).val(); // get the input value;
        value = parseInt(value); // convert it from string to int.

        primes[i] = {};
        primes[i].value = value;
        primes[i].isPrime = isNan(value) ? false : isPrime(value);

        $('#result'+i).text(primes[i].isPrime ? 'Prime' : 'Not Prime');
    }

    console.dir(primes); // log output to console.
    $('#container2').html(JSON.stringify(primes)); // output to container2 as string

});

标签的代码(修改):

<label>1. </label> <input id="input1" type="text"><span id="result1"></span><br>
<label>2. </label> <input id="input2" type="text"><span id="result2"></span><br>
<label>3. </label> <input id="input3" type="text"><span id="result3"></span><br>
<label>4. </label> <input id="input4" type="text"><span id="result4"></span><br>
<label>5. </label> <input id="input5" type="text"><span id="result5"></span><br>
<label>6. </label> <input id="input6" type="text"><span id="result6"></span><br>
<label>7. </label> <input id="input7" type="text"><span id="result7"></span><br>
<label>8. </label> <input id="input8" type="text"><span id="result8"></span><br>

如果你想让输出更漂亮一点,你可以这样做:

var output = '<pre>';
for (var i in primes) {
    output += primes[i].value + ': ' + primes[i].isPrime + "\n";
}
output += '</pre>';
$('#container2').html(output);

【讨论】:

  • 感谢您的宝贵时间! @mason81 我会在我的代码中实现它,再次感谢!
  • 不客气@GustavoR。快乐编码。如果它不起作用,或者如果您需要帮助理解某些内容,请告诉我。
  • console.dir(primes) 只是将素数的内容打印到控制台。如果您查看我对标签和文本框所做的更改,您会看到我添加了一些跨度,并在 JavaScript 中将“Prime”或“Not Prime”与该三元组放在一起。
  • @GustavoR。对不起,我在原来的答案中犯了一个错误。我修好了它。它没有显示在跨度中,因为我不正确地使用了素数对象。它现在应该可以工作了。如果你想打印到你的容器,你可以使用$('#container2').html(JSON.stringify(primes));,否则你需要想出一种方法让输出更漂亮。
  • @GustavoR。我再次更新了我的答案,使输出更易于阅读(请参阅答案的底部)。
【解决方案2】:

您无需创建数组并遍历数组中的每个元素。相反,您可以编写一个函数来检查传递的标签是否为质数。如果是素数,请填写 HTML。我已经用 PHP 编写了我的函数,但 javascript 的逻辑是相同的。

function is_prime($number)
{
    if ($number==1)
        return false;
    if ($number==2)
        return true;
    $sqrt = sqrt($number);
    $floor = floor($sqrt);
    for ($i=2 ; $i <= $floor ; $i++)
    {
        if ($number % $i == 0)
        {
            return false;
        }
    }
    return true;
}
$start = 1;
$labels = 8;
for($i = 1; $i <= $labels; $i++)
{
    if(is_prime($i))
    {
        echo '<label>'.$i.'. </label>'.'<input id="input'. $i.'" type="text" value=" '. $i .'">'.'<br>';
    }
}

// output

2. 2
3. 3
5. 5
7. 7

希望这会有所帮助!

【讨论】:

  • 谢谢,我明白了,我会试试这个逻辑! :D
【解决方案3】:

这是我的整个 HTML:

  <script>
        $(document).ready(function(){

            $('#btn1').click(function () {
                var count = 8;   // in case you decide to change this later
                var primes = {}; // object instead of array

                for (var i = 1; i < count; i++) {
                    var value = $('#input'+i).val(); // get the input value;
                    value = parseInt(value); // convert it from string to int.

                    primes.i.value = value;
                    primes.i.isPrime = isNan(value) ? false : isPrime(value);
                    $('#result'+i).text(primes.i.isPrime ? 'Prime' : 'Not Prime');
                    }
            $('#container2').html(primes); // log output to console.
            });

            function isPrime(n) {

            // If n is less than 2 or not an integer then by definition cannot be prime.
            if (n < 2) {return false}
            if (n != Math.round(n)) {return false}
            // Now assume that n is prime, we will try to prove that it is not.
            var isPrime = true;
            // Now check every whole number from 2 to the square root of n. If any of these divides n exactly, n cannot be prime.
            for (var i = 2; i <= Math.sqrt(n); i++) {
                if (n % i == 0) {isPrime = false}
            }
            // Finally return whether n is prime or not.
            return isPrime;
            }

        });
</script>      
</head>

<body>
    <center><h2>Prime Numbers Calculator.</h2><br></center>
    <div class="well">
        <div class="container" id="container1">
            <div class="col-md-4">
                <label>1. </label> <input id="input1" type="text"><span id="result1"></span><br>
                <label>2. </label> <input id="input2" type="text"><span id="result2"></span><br>
                <label>3. </label> <input id="input3" type="text"><span id="result3"></span><br>
                <label>4. </label> <input id="input4" type="text"><span id="result4"></span><br>
                <label>5. </label> <input id="input5" type="text"><span id="result5"></span><br>
                <label>6. </label> <input id="input6" type="text"><span id="result6"></span><br>
                <label>7. </label> <input id="input7" type="text"><span id="result7"></span><br>
                <label>8. </label> <input id="input8" type="text"><span id="result8"></span><br>
            </div>
        <div class="col-md-4">
            <div class="container" id="container2">

            </div>
        </div>
        <div class="col-md-4">
            <div class="container" id="container3">

            </div>
        </div>
        </div>
    </div>
        <center><button id="btn1" class="btn btn-primary"> Calculate</button>
        <button id="btn2" class="btn btn-primary"> Show</button>
        <button id="btn3" class="btn btn-primary"> Sort</button>
        <button id="btn4" class="btn btn-primary"> Clean</button></center>
</body>

但在另一个容器中显示结果仍然存在问题

【讨论】:

    猜你喜欢
    • 2011-10-29
    • 1970-01-01
    • 2021-08-01
    • 2015-05-14
    • 2015-10-05
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多