2017-05-26 7 views
0

私は素数の配列を返します。この機能を持っている:私は数字の配列内のすべての数字の素因数を取得しにそれをプッシュするループ内の関数の戻り値をプッシュすることができません

function getPrimeFactors(n) { 
    var factors = []; 
    for (i = 2; i <= Math.sqrt(n); i++) { 
    if (n % i === 0) { 
     var count = 0; 
     while (n % i === 0) { 
     n = n/i; 
     count++; 
     } 
     for (j = 1; j <= count; j++) { 
     factors.push(i); 
     } 
    } 
    } 
    if (n !== 1) { 
    factors.push(n); 
    } 
    return factors; 
} 

var numbers = [2, 3, 4, 5]; 
var array = []; 

を新しい配列(配列)

for(i = 0; i < numbers.length; i++) {  
    array.push(getPrimeFactors(numbers[i])); 
} 

私は間違っていますか?

+0

正しい答えをアップヴォートして消えてしまった...正しい答えを削除したのは誰ですか? Lol – quirimmo

+1

正しい答えを押し戻す人を待っているbtwループ内の変数iにvarを使う必要があります。さもなければ、私はグローバル変数として扱われます。もちろん、たとえjが一度だけ使用されていても、ここでの問題はi – quirimmo

+0

ありがとうございました。変数を適切に宣言することが私の問題でした。 –

答えて

0

削除された答えでDamien Goldが述べたように、forループでvarを使用して変数をローカルにし、2つの関数が互いに干渉しないようにします。

function getPrimeFactors(n) { 
    var factors = []; 
    for (var i = 2; i <= Math.sqrt(n); i++) { 
    if (n % i === 0) { 
     var count = 0; 
     while (n % i === 0) { 
     n = n/i; 
     count++; 
     } 
     for (var j = 1; j <= count; j++) { 
     factors.push(i); 
     } 
    } 
    } 
    if (n !== 1) { 
    factors.push(n); 
    } 
    return factors; 
} 

そして:あなたはあなたのgetPrimeFactorsアレイに含まれる値を追加するのではなく、あなたの配列に配列を推進している 追記として

var numbers = [2, 3, 4, 5]; 
var array = []; 

for(var i = 0; i < numbers.length; i++) {  
    array.push(getPrimeFactors(numbers[i])); 
} 

。代わりに結果の数値を1つの配列にプッシュしたい場合は、次のようにしてください:

for(var i=0; i<numbers.length; i++) {  
    array = array.concat(getPrimeFactors(numbers[i])); 
} 
+0

は 'ではありません。プッシュ 'は配列の最後に値を追加しませんか? – julekgwa

+0

@ 2by2彼は、関数が配列を返し、配列に1つの要素を追加するpushを使用することを意味し、この要素は別の配列です。 concatを使用すると、すべての値を元の配列 – quirimmo

+0

に追加します。正解ですが、演算子は数字の配列ではなく数字の配列を必要としていました。私はそれが彼が望んでいるかどうかはもう分かりません;)彼がそれを明確にすることができれば、私はそれを釘付けにしたと思われるよりもDamienとして投稿を削除します。 – Compufreak

関連する問題