2017-11-27 11 views
0

私は基本的にうまく動作するように見える次のコードを持っています。JS console.logメソッドは2回の値を出力します

S(大文字と小文字を区別)で始まるすべての名前をコンソールに出力することを目的としています。

let names = ['Selma', 'Yirma']; 
let sNames = []; 
names.forEach((e)=>{ 
    if (e.charAt(0) === 'S') { 
     sNames.push(e); 
    } 
     console.log(sNames); 
}); 

Googleクロームコンソールでコードを使用しましたが、「セルマ」が2回表示されました。何故ですか?なぜ一度だけではないのですか?

+1

から?ループの最終結果のみを表示する場合は、ループの後にlog文を移動します。 (あなたが新しい配列を作るために '.forEach()'の代わりに '.filter()'を考えたことがありますか?また 'e.charAt(0)'ではなく 'e [0]文字列の最初の文字を取得します。) – nnnnnn

+0

うわー、ループ内の 'console.log'を置くという概念を考えていなかった、私はそれを逃したし、ループの各反復は、結果に影響を与えるだろう状況に思いませんでした'console.log'によって。私はこの啓蒙のためにあなたに非常に感謝します! – Arcticooling

+0

'filter()'は考慮していません。これはエクササイズの一部です。配列から必要な文字列をフィルタリングするための 'filter()'メソッドを知っています。 – Arcticooling

答えて

1

ループの最初の反復でsNamesにプッシュするとsNamesがログに記録され、Yirmaに再びログオンするため、Selmaが2回表示されます。あなたはセルマを二度見ます。ループの外にconsole.logを移動します。

0

console.log()がforループ内にあるため、console.log()をループ外に移動します。あなた `.forEach()` *持っている2回の*の反復とは、 "セルマは、" 最初の繰り返し*前*コンソールログステートメントに `sNames`に追加され

let names = ['Selma', 'Yirma']; 
 
    let sNames = []; 
 
    names.forEach((e)=>{ 
 
     if (e.charAt(0) === 'S') { 
 
      sNames.push(e); 
 
     } 
 
    }); 
 
    
 
    console.log(sNames);

関連する問題