下面只是我的代码的一部分,但我知道这是有问题的,因为我不能让它返回除'undefined'之外的任何值。我已经在这几个小时了,无法弄明白。
我希望能够输入一个数字并将其因子推送到数组中。我通过提醒数组中的第一项来测试它,但我什么都没得到。我相信这很容易,但我无法理解。这是代码:
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]);
感谢您的帮助!
答案 0 :(得分:2)
()
,而不是[]
来拨打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 强>
答案 1 :(得分:1)
推送语法中有错误。正确的推送语法是 -
factorsArray.push(i);
在找到第一个除数后立即从函数返回也不会给出完整列表。你可能想在找到所有除数后返回。
考虑到以上所有因素,您应该按照以下步骤重写您的功能 -
function factors(numberInQuestion){
for(var i = 2; i < numberInQuestion - 1; i++){
if(numberInQuestion % i === 0) {
factorsArray.push(i);
}
}
}
你会没事的。
答案 2 :(得分:0)
您已经对此进行了编码,以便在您找到第一个因素时,您的函数会立即返回。只需删除该语句中的return
关键字。 (什么&#34;返回&#34;表示在JavaScript和其他类似语言中是立即退出函数并从调用函数的位置继续。)
哦,你也可以用括号来调用函数(比如.push()
),而不是方括号。
答案 3 :(得分:0)
推送到阵列时,该函数不应返回。执行循环后返回数组。 <{1}}子句也是不必要的。
else
鉴于示例的目的,必须考虑两个项目
代码不确定该数字是否实际是素数。代码将返回可能的最小因子,因为循环从2开始并递增,然后返回数组中的第一个元素。最大的因素实际上是数组中的最后一个元素。我已经纠正了这个例子,找到了最重要的因素。你可以通过这个小提琴来测试它:http://jsfiddle.net/whKGB/1/