フィルタリングではない配列のフィルター

DESYNC:

私は素数を引き出すために、乱数の配列をフィルタリングしようとしています。

私が働い機能(持ってisPrime返すように見える)trueまたはfalse正しくなく、配列内のすべての数は、フィルタによって返された配列に「フィルタリング」されているが。

私は、フィルタのドキュメントを見て、いくつかのビデオを見たが、私はそれを考え出したていない、私はそれは、フィルタの関数呼び出しの内部で行う必要があるかもしれないと思います。私の誤差がある場合、あなたは私を伝えることができますか?

numArray = [];

for(i=0; i<1000; i++){
  numArray.push(Math.random(1000));
}

const isPrime = (num) => {
  for(i=2;i<num;i++){
    if(num % i === 0){
      return false;
    }
  }
  return true;
}

const results = numArray.filter(value => isPrime(value));
  
for(num in results){
  console.log(num);
  console.log(isPrime(num)) //added to demonstrate function is working and should return false to the filter                        
}

Maheerアリ:

あなたは間違った方法で乱数を生成しています。あなたのコードは、以下の浮動小数点の配列を作成します1、あなたに応じのでisPrime、彼らはすべての素数になります。

注:なし変数を使用していないletか、cosntそれがコード内で多くの問題を引き起こす可能性があります。

乱数を作成する方法?

  • Math.random()間で浮動小数点数を返す関数である01
  • あなたは乗算最大範囲でその数はあなたが持っていると思います。
  • 乗じた後、それはまだ浮い数になります。だから、使うMath.floor()整数にランダムな浮動小数点数を丸めます

let numArray = [];

for(let i=0; i<10; i++){
  numArray.push(Math.floor(Math.random() * 30));
}

const isPrime = (num) => {
  for(let i=2;i<num;i++){
    if(num % i === 0){
      return false;
    }
  }
  return true;
}

const results = numArray.filter(value => isPrime(value));

console.log(JSON.stringify(numArray))
console.log(JSON.stringify(results));

OPの質問に答えること

「なぜ、ループの下部には、コードをチェックするために使用することは数字5、6 ... 997、998を与えます」

JavaScriptの配列に基本的オブジェクトです。for..in反復するループであるキーオブジェクトのない値。そうケースアレイ内のキーは、アレイのインデックスである0...999上記の場合。だから、それらのインデックスをログに記録されました

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=28488&siteId=1