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

INPUT · スライド

入れ子を繰り返しで処理する

01 / 06

番号だけが違う行が並んだら

前のレッスンの最後で、cart[0] と cart[1] でほとんど同じ行を2つ書いたよね。

番号だけが違う行が並んだら繰り返しにできる。配列を for でまわしたときと、やることは同じだよ。

02 / 06

i を番号に使う

for の i を配列の番号に使い、そのあとに .名前 をつなげるだけ。

list[i].name は「i 件目のオブジェクトの name」と読めばいいよ。

const pets = [  { name: "もふ", age: 3 },  { name: "ぽち", age: 5 },  { name: "たま", age: 1 },];for (let i = 0; i < pets.length; i++) {  console.log(pets[i].name);}

実行結果

もふ
ぽち
たま

03 / 06

1件ずつ受け取ると読みやすい

pets[i].name が何度も出てくると読みにくい。{ } の中でいったん受け取ると、ぐっと読みやすくなるよ。

どちらの書き方でも動きは同じ。読みやすいほうを選ぼう。

const pets = [  { name: "もふ", age: 3 },  { name: "ぽち", age: 5 },];for (let i = 0; i < pets.length; i++) {  const pet = pets[i];  console.log(`${pet.name}は${pet.age}さい`);}

実行結果

もふは3さい
ぽちは5さい

04 / 06

集計する

ためる変数を外に置けば、全件の合計が出せる。データが何件あってもコードは同じだよ。

if を混ぜれば「条件に合うものだけ数える」こともできる。ここまで学んだ道具が全部つながるところだよ。

const cart = [  { name: "パン", price: 160, count: 2 },  { name: "のり", price: 220, count: 3 },];let total = 0;for (let i = 0; i < cart.length; i++) {  total += cart[i].price * cart[i].count;}console.log(total);

実行結果

980

05 / 06

条件に合うものだけ数える

ループの中に if を入れれば、条件に合う件だけを数えたりためたりできる。「在庫が0のものだけ数えたい」というような場面だよ。

const items = [  { name: "パン", stock: 0 },  { name: "のり", stock: 5 },  { name: "みず", stock: 0 },];let outOfStock = 0;for (let i = 0; i < items.length; i++) {  if (items[i].stock === 0) {    outOfStock++;  }}console.log(`${outOfStock}件が在庫切れ`);

実行結果

2件が在庫切れ

06 / 06

最大値を探す

「いちばん高いものはどれ?」も、同じ形で書ける。基準になる変数を用意して、より大きいものが出るたびに入れ替えるよ。

最初の1件を基準にしておくのがコツ。0 から始めると、全員がマイナスの値だったときに正しく比べられなくなる。

const prices = [ { name: "パン", price: 160 }, { name: "のり", price: 220 }, { name: "みず", price: 90 } ];let highest = prices[0];for (let i = 1; i < prices.length; i++) {  if (prices[i].price > highest.price) {    highest = prices[i];  }}console.log(highest.name);

実行結果

のり