შესვლა

პროგრამირების საფუძვლები › დამწყები › მასივები

მასივის გავლა ციკლით

მარტივი⏱ 7 წთ+20 XP👑 Pro#მასივები#ციკლები#for...of

რას ისწავლი

  • როგორ გაიარო მასივი ინდექსიანი for ციკლით
  • როგორ გაიარო მასივი უფრო მოკლე for...of ციკლით
  • როგორ აირიდო „ერთით მეტი“ შეცდომა მასივის ბოლოს

ციკლი და მასივი ერთმანეთისთვისაა შექმნილი

მასივის ყველაზე დიდი უპირატესობა ისაა, რომ მისი ყველა ელემენტის დამუშავება ერთი ციკლით შეიძლება, რამდენი ელემენტიც არ უნდა იყოს: სამი თუ სამი ათასი. ყველა ელემენტის რიგრიგობით გავლას იტერაცია მასივზე ან უბრალოდ „მასივის გავლა“ ჰქვია.

ინდექსიანი for

უკვე იცი for ციკლი და იცი, რომ ინდექსები 0-დან length - 1-მდეა. ორივე ერთად:

JavaScript
let fruits = ["ვაშლი", "მსხალი", "ატამი"];

for (let i = 0; i < fruits.length; i++) {
  console.log(i, fruits[i]);
}
  1. i იწყება 0-დან, პირველი ელემენტის ინდექსიდან.
  2. პირობაა i < fruits.length, ნაკლებია და არა ნაკლები ან ტოლი, რადგან ბოლო ინდექსი სიგრძეზე ერთით ნაკლებია.
  3. ყოველ იტერაციაზე fruits[i] შემდეგი ელემენტია.

იბეჭდება 0 ვაშლი, 1 მსხალი, 2 ატამი. თუ მასივს ელემენტს დაამატებ, ციკლი ავტომატურად მასაც გაივლის: პირობაში fruits.length წერია და არა რიცხვი 3.

for...of: მხოლოდ ელემენტები

თუ ინდექსი არ გჭირდება და მხოლოდ ელემენტები გაინტერესებს, არსებობს უფრო მოკლე ჩანაწერი:

JavaScript
let fruits = ["ვაშლი", "მსხალი", "ატამი"];

for (const fruit of fruits) {
  console.log(fruit);
}

იკითხება ასე: „fruits-ის ყოველი fruit-ისთვის…“. ყოველ იტერაციაზე ცვლადი fruit შემდეგ ელემენტს იღებს. აქ არც ინდექსია, არც პირობა, არც ბიჯი: შეცდომის დაშვების ადგილი უბრალოდ აღარ არის. ცვლადს მხოლობითი სახელი დაარქვი: fruit of fruits, score of scores, player of players.

რომელი ავირჩიო

  • for...of, როცა მხოლოდ ელემენტები გჭირდება. ეს ყველაზე ხშირი შემთხვევაა.
  • ინდექსიანი for, როცა ინდექსიც გჭირდება: ნომრიანი სიის დასაბეჭდად, ელემენტის შესაცვლელად arr[i] = ..., ან მეზობელი ელემენტების შესადარებლად arr[i] და arr[i + 1].

მაგალითი: ჯამი

ციკლით მასივის ყველა ელემენტის ჯამს დამგროვებლით დაითვლი:

JavaScript
let scores = [90, 75, 100, 64];
let total = 0;

for (const score of scores) {
  total += score;
}

console.log("ჯამი:", total);                    // ჯამი: 329
console.log("საშუალო:", total / scores.length); // საშუალო: 82.25

სცადე თავად

გაუშვი, მერე დაამატე მასივში კიდევ ორი დავალება და ნახე, რომ ნუმერაცია თავისით გაგრძელდა.

JavaScript · სცადე თავად

ხშირი შეცდომები

  • i <= arr.length. ციკლი ერთით მეტჯერ ბრუნავს და ბოლო იტერაციაზე arr[i] არის undefined. პირობა უნდა იყოს i < arr.length.
  • ნუმერაცია ნულიდან. ადამიანებს სია 1-დან სჩვევიათ. ინდექსი 0-დან იწყება, ამიტომ ნომრად i + 1 დაბეჭდე.
  • for...in მასივზე. არსებობს მსგავსი ჩანაწერი for...in, მაგრამ ის ობიექტებისთვისაა და ელემენტების ნაცვლად ინდექსებს აბრუნებს. მასივისთვის for...of გამოიყენე.

სავარჯიშო

მასივი prices = [4, 12.5, 3, 8] ფასებია ლარში. ციკლით დაბეჭდე თითოეული ფასი ფორმატით ფასი: 4 ლარი და ბოლოს ჯამი: სულ: 27.5 ლარი.

JavaScript · სცადე თავად
💡 მინიშნება

for (const price of prices) ციკლში დაბეჭდე ფასი და დაამატე total-ს. ჯამი ციკლის შემდეგ დაბეჭდე.

✅ ამოხსნის ნახვა
JavaScript
let prices = [4, 12.5, 3, 8];
let total = 0;

for (const price of prices) {
  console.log(`ფასი: ${price} ლარი`);
  total += price;
}

console.log(`სულ: ${total} ლარი`);

მინი-ქვიზი

1რამდენჯერ შესრულდება for (let i = 0; i < arr.length; i++), თუ arr-ში 4 ელემენტია?

2რას იღებს x ციკლში for (const x of ["ა", "ბ"])?

3რა არის შეცდომა? for (let i = 0; i <= arr.length; i++) { console.log(arr[i]); }

შეჯამება

  • ინდექსიანი ციკლი: for (let i = 0; i < arr.length; i++), ელემენტი arr[i].
  • for (const item of arr) ელემენტებს პირდაპირ გადის და შეცდომის ნაკლებ შანსს ტოვებს.
  • ინდექსი გჭირდება? ინდექსიანი for. არ გჭირდება? for...of.
  • პირობა < და არა <=.
📝 ჩემი შენიშვნა