くり返しとデータの持ち方

INPUT · スライド

forとif-elseと配列を組み合わせよう

01 / 06

全要素を二手に分ける

前回は「条件に合う要素だけ」を処理した。

今回は if-else を使って、全要素をもれなく二手に振り分ける。合格と不合格、偶数と奇数、在庫ありとなし——分類の基本形だよ。

02 / 06

forの中のif-else

毎周、要素が if 側か else 側のどちらか必ず一方を通る。

だから出力の行数は要素数と同じになる。「全員に判定を返す」イメージだね。

let scores = [45, 80, 92];for (let i = 0; i < scores.length; i++) {  if (scores[i] >= 60) {    console.log("合格");  } else {    console.log("不合格");  }}

実行結果

不合格
合格
合格

03 / 06

要素と判定をセットで表示

要素の値と判定結果を連結すれば、成績表のような出力が作れる。

誰の結果かわかるようにするのは、画面表示の基本だよ。

let scores = [45, 80];for (let i = 0; i < scores.length; i++) {  if (scores[i] >= 60) {    console.log(scores[i] + "点: 合格");  } else {    console.log(scores[i] + "点: 不合格");  }}

実行結果

45点: 不合格
80点: 合格

04 / 06

2つの配列に振り分ける

空の配列を2つ用意して、if 側と else 側でそれぞれに push すれば、データの仕分けができる。

メールの受信箱と迷惑メールフォルダの振り分けも、原理はこれと同じ。

let nums = [3, 8, 5, 2];let even = [];let odd = [];for (let i = 0; i < nums.length; i++) {  if (nums[i] % 2 === 0) {    even.push(nums[i]);  } else {    odd.push(nums[i]);  }}console.log(even);console.log(odd);

実行結果

[8, 2]
[3, 5]

05 / 06

入れ物はループの外で作る

振り分け先の配列やカウンターは、必ずループの外で用意しよう。

中で作ると1周ごとに空っぽに戻ってしまって、最後の1件しか残らない。「なぜか1件しか入っていない」というときは、まずここを疑ってみて。

06 / 06

両方数えて確かめる

振り分けたあとは、2つを足すと元の件数になるかを確かめるといいよ。

if-else は必ずどちらか一方を通るので、合計は必ず元の要素数と一致するはず。合わないなら、条件か push の書き場所がまちがっている。

こういう「答え合わせの方法を持っておく」のは、プログラムを書くうえでとても役に立つ習慣だよ。

let nums = [3, 8, 5, 2];let even = [];let odd = [];for (let i = 0; i < nums.length; i++) {  if (nums[i] % 2 === 0) {    even.push(nums[i]);  } else {    odd.push(nums[i]);  }}console.log(even.length + odd.length);console.log(nums.length);

実行結果

4
4