【问题标题】:Trouble pushing to an array in JS在 JS 中推送到数组时遇到问题
【发布时间】:2013-09-04 18:39:04
【问题描述】:

下面只是我的代码的一部分,但我知道这是有问题的,因为我无法让它返回除“未定义”之外的任何值。我已经经历了几个小时,无法弄清楚。

我希望能够输入一个数字并将其因子推送到一个数组中。我已经通过警告数组中的第一项来测试它,但我什么也没得到。我敢肯定这很容易,但我就是想不通。代码如下:

    var numberInQuestion = prompt("Of what number are you wanting to find the largest        prime factor?");

    //determine factors and push to array for later use
    var factorsArray = [];
    function factors(numberInQuestion){
        for(var i = 2; i < numberInQuestion-1; i++){
            if(numberInQuestion % i === 0){
                return factorsArray.push[i];
            } else {
                continue;
            }
        }
    };
    factors(numberInQuestion);
    alert(factorsArray[0]);

感谢您的帮助!

【问题讨论】:

  • 提示有点欺骗性,因为该函数不检查素数,它实际上返回最小因子。

标签: javascript arrays return push undefined


【解决方案1】:
  • 你只能返回一个
  • 您必须使用(),而不是[] 来调用push
  • factorsArray 应该是 factors 的本地(将定义放在函数中)
  • else { continue; } 没用

这是完全更正的代码:

var numberInQuestion = prompt("Of what number are you wanting to find the factors of?");

//determine factors
function factors(numberInQuestion){
    var factorsArray = []; // make it local
    for (var i = 2; i < numberInQuestion-1; i++){
        if(numberInQuestion % i === 0){
            factorsArray.push(i); // use (), and don't return here
        } // no need for else { continue; } because it's a loop anyway
    }
    return factorsArray; // return at the end
};
var result = factors(numberInQuestion); // assign the result to a variable
alert(result);

Here's a JSFiddle.

【讨论】:

  • 将“factorsArray”设为函数的局部变量可能也是一个好主意。
  • @Doorknob:不。 Array.push 返回数组的新长度。
  • 准确地说,它返回 undefined 因为函数 push 没有名为“2”的属性。
  • 非常感谢,这真的很有帮助。编程社区如何提供这样的帮助真是太棒了!
【解决方案2】:

您的推送语法有误。推送的正确语法是 -

factorsArray.push(i);

在找到第一个除数后立即从函数返回不会给你完整的列表。找出所有除数后,您可能想返回。

考虑到以上所有,你应该重写你的函数如下 -

function factors(numberInQuestion){

    for(var i = 2; i < numberInQuestion - 1; i++){
        if(numberInQuestion % i === 0) {
            factorsArray.push(i);
        }
    }
}

你会没事的。

【讨论】:

  • 感谢您的帮助!
【解决方案3】:

您已经对此进行了编码,因此当您找到第一个因素时,您的函数会立即返回。只需删除该语句中的 return 关键字即可。 (“返回”在 JavaScript 和其他类似语言中的意思是立即退出函数并从调用函数的位置恢复。)

哦,还有,你用括号而不是方括号来调用函数(如.push())。

【讨论】:

  • 非常感谢您的帮助。
【解决方案4】:

推入数组时函数不应返回。执行循环后返回数组。 else 子句也是不必要的。

var numberInQuestion = prompt("Of what number are you wanting to find the largest        prime factor?");

function factors(numberInQuestion){
    var factorsArray = [];
    for(var i = 2; i < numberInQuestion-1; i++){
        if(numberInQuestion % i === 0 && isPrime(i)){
            factorsArray.push(i);
        }
    }
    return factorsArray; 
};
var factors = factors(numberInQuestion);
alert(factors[factors.length-1]);

//From: http://stackoverflow.com/questions/11966520/how-to-find-prime-numbers
function isPrime (n)
{
    if (n < 2) return false;
    var q = Math.sqrt (n);

    for (var i = 2; i <= q; i++)
    {
        if (n % i == 0)
        {
            return false;
        }
    }

    return true;
}

鉴于示例的目的,必须考虑两项

代码无法确定数字是否实际上是素数。代码将返回可能的最小因子,因为循环从 2 开始并递增,然后返回数组中的第一个元素。最大的因素实际上是数组中的最后一个元素。我已经更正了这个例子以找到最大的素数。你可以通过这个小提琴来测试它:http://jsfiddle.net/whKGB/1/

【讨论】:

  • 感谢您的浏览和帮助。
  • @michaelto20 很高兴我能帮上忙,请看 cmets
猜你喜欢
  • 1970-01-01
  • 2018-10-14
  • 1970-01-01
  • 2011-11-18
  • 2016-03-19
  • 1970-01-01
  • 1970-01-01
  • 2014-09-22
  • 2020-02-05
相关资源
最近更新 更多