偶数または奇数を見つける

Aug 21 2020

偶数または奇数を見つけるためのスクリプトを作成するために、より良い方法またはさまざまな方法で何ができたかを確認するための批評を探しています。私はJavaScriptを使ったプログラミング、そして一般的なプログラミングに不慣れです。これは、偶数または奇数を見つけるために私が書いた最初の課題の1つです。

    var numList = [];
    while(numList.length < 5){
    numList.push(window.prompt());
    }

    var evenNumbers = [];
    
    numList.forEach(function(element){
        if (element % 2 === 0){ 
            evenNumbers.push(element);
        }
    })
    document.write(evenNumbers);

回答

9 LucasWauke Aug 21 2020 at 07:55

Array.prototype.filterを使用できます。

次のように読むことができます。return関数式を満たす要素のみを持つ配列を返します。

このようにして、配列のインスタンス化を回避し、この反復の後でのみを作成できますpush

var numList = [];
while(numList.length < 5){
  numList.push(window.prompt());
}

var evenNumbers = numList.filter(function (element) {
  return element % 2 === 0
});
// that's the same that 
// var evenNumbers = numList.filter(element => element % 2 === 0);

document.write(evenNumbers);

ただし、よりクリーンな構文を持つ矢印関数を使用できます。

6 SᴀᴍOnᴇᴌᴀ Aug 21 2020 at 12:55

偶数または奇数を見つけるためのさまざまな方法。

モジュロ演算子は、数値が偶数か奇数かをテストするために正常に機能しますが、より高速な手法(初心者が知っているとは思わない)は、ビット単位のAND&を使用することです。それがどのように機能するかの完全な説明については、この記事を参照してください。

function isEven(number) {
     return !(number & 1);
}
for (let x = 0; x < 6; x++) {
    console.log(x, ' is even: ', isEven(x));
}

その他のレビューの側面

配列のフィルタリング

ルーカスがすでに述べたようにArray.prototype.filter()、要素の追加を単純化するために使用できますevenNumbers。Array.prototype.reduce()各反復で累積配列を返す必要があり、初期値を配列に設定する必要があるほど簡潔ではありませんが、使用できます。

あなたはについては、特に要求していないものの、パフォーマンスと例えば機能的技術を-あなたはコードは(可能な限り効率的なようにしたい場合は、それは短時間で数百万人(またはそれ以上)回実行されます例えば、その後、イテレータを避けるため、array.filter()array.map()、for...ofループと同様に-ループを使用しforます。

変数の宣言

const代わりにvar、両方の配列の偶発的な再割り当てを回避するために使用できます。変数がブロック内にある場合、スコープはブロックに制限されます。で宣言されている場合でも、「アイテムを配列にプッシュすることは可能です」1に注意してくださいconst

ユーザーの入力の促進

window.prompt()「ユーザーにテキストの入力を求めるオプションのメッセージを含むダイアログを表示します。」2。わかりやすいメッセージを最初の引数として渡して、予想される入力に関する情報をユーザーに提供できます。

window.prompt(“Please enter a number”);

さらに:

結果は文字列であることに注意してください。つまり、ユーザーが指定した値をキャストする必要がある場合があります。たとえば、答えが数値である必要がある場合は、値を数値にキャストする必要があります。

  const aNumber = Number(window.prompt("Type a number", ""));

3

したがって、Numberコンストラクターを使用して、配列に数値を格納できます。

numList.push(Number(window.prompt("Please enter a number")));

で出力を送信する document.write()

:のでdocument.write()、ドキュメントへの書き込みストリーム呼び出し、document.write()クローズ(ロード)文書は自動的にdocument.open()を呼び出すには、ドキュメントをクリアします。

4

したがって、DOM要素がページに存在するWebページで実行されるスクリプトでその関数を使用することを計画しないでください。そうしないと、それらが削除されます。

5 RenéSchaar Aug 21 2020 at 14:03

varの代わりにletES6を使用する

var numList = [];
let numList = [];

フィルタ方式を使用する

numList.forEach(function(element){
    if (element % 2 === 0){ 
        evenNumbers.push(element);
    }
}) 

ルーカスウォークによって提案されたように

let evenNumbers = numList.filter(element => element % 2 === 0);

プロンプトに何を入力するかをユーザーに伝えます

numList.push(window.prompt());
numList.push(window.prompt("Please enter a whole number"));

あなたは間違いなくそれをより読みやすくするためにあなたのコードスタイルに取り組むべきです

インデントを使用する

while(numList.length < 5){
numList.push(window.prompt());
}
while(numList.length < 5){
    numList.push(window.prompt());
}

中括弧の前に空白を残します

numList.forEach(function(element){
    if (element % 2 === 0){ 
        evenNumbers.push(element);
    }
})
 numList.forEach(function(element) {
     if (element % 2 === 0) { 
         evenNumbers.push(element);
     }
 })

私の意見では、括弧内に空白を残すと読みやすくなります。

私は個人的にこれをしている多くの人々を知りませんが、多分それはあなたのために働くかもしれませんそれを試してみてください

numList.forEach(function(element){
    if (element % 2 === 0){ 
        evenNumbers.push(element);
    }
})
 numList.forEach( function( element ) {
     if ( element % 2 === 0 ) { 
         evenNumbers.push( element );
     }
 } )

これは、多くの括弧(擬似コード)を使用する場合に特に役立ちます。

method(function(method(getter())).setSomething(getSomethingFromSomewhere(somewhere)))
method( function( method( getter() ) ).setSomething( getSomethingFromSomewhere( somewhere ) ) )

ご覧のとおり、どの括弧が一緒に属しているかを簡単に確認できます

結論

var numList = [];
while(numList.length < 5){
numList.push(window.prompt());
}

var evenNumbers = [];

numList.forEach(function(element){
    if (element % 2 === 0){ 
        evenNumbers.push(element);
    }
})
document.write(evenNumbers); 

let numList = [];

while ( numList.length < 5 ) {
    numList.push( window.prompt() );
}

let evenNumbers = numList.filter(element => element % 2 === 0);

document.write( evenNumbers );