开发者问题收集

在 JS 中推送数组时出现问题

2013-09-01
151

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

我希望能够输入一个数字并将其因子推送到数组中。我已经通过提醒数组中的第一个项目进行了测试,但什么也没得到。我确信这很简单,但我就是搞不懂。这是代码:

    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]);

感谢您的帮助!

3个回答
  • 您只能返回 一个
  • 您必须使用 () ,而不是 [] 来调用 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);

这是一个 JSFiddle

tckmn
2013-09-01

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

factorsArray.push(i);

此外,在找到第一个除数后立即从函数返回不会为您提供完整列表。您可能希望在找到所有除数后返回。

考虑到以上所有情况,您应该按如下方式重写您的函数 -

function factors(numberInQuestion){

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

这样就没问题了。

MD Sayem Ahmed
2013-09-01

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

哦,另外,您使用 括号 而不是方括号来调用函数(如 .push() )。

Pointy
2013-09-01