პროგრამირების საფუძვლები › დამწყები › მასივები
მასივის გავლა ციკლით
ეს თავი CodeQuest Pro-ს ნაწილია
Pro ხსნის სკოლის ყველა კურსს და თამაშის ყველა ლეველს, ვიდეოს და პროექტს. ერთჯერადი გადახდა, გამოწერის გარეშე.
რას ისწავლი
- როგორ გაიარო მასივი ინდექსიანი
forციკლით - როგორ გაიარო მასივი უფრო მოკლე
for...ofციკლით - როგორ აირიდო „ერთით მეტი“ შეცდომა მასივის ბოლოს
ციკლი და მასივი ერთმანეთისთვისაა შექმნილი
მასივის ყველაზე დიდი უპირატესობა ისაა, რომ მისი ყველა ელემენტის დამუშავება ერთი ციკლით შეიძლება, რამდენი ელემენტიც არ უნდა იყოს: სამი თუ სამი ათასი. ყველა ელემენტის რიგრიგობით გავლას იტერაცია მასივზე ან უბრალოდ „მასივის გავლა“ ჰქვია.
ინდექსიანი for
უკვე იცი for ციკლი და იცი, რომ ინდექსები 0-დან length - 1-მდეა. ორივე ერთად:
let fruits = ["ვაშლი", "მსხალი", "ატამი"];
for (let i = 0; i < fruits.length; i++) {
console.log(i, fruits[i]);
}iიწყება 0-დან, პირველი ელემენტის ინდექსიდან.- პირობაა
i < fruits.length, ნაკლებია და არა ნაკლები ან ტოლი, რადგან ბოლო ინდექსი სიგრძეზე ერთით ნაკლებია. - ყოველ იტერაციაზე
fruits[i]შემდეგი ელემენტია.
იბეჭდება 0 ვაშლი, 1 მსხალი, 2 ატამი. თუ მასივს ელემენტს დაამატებ, ციკლი ავტომატურად მასაც გაივლის: პირობაში fruits.length წერია და არა რიცხვი 3.
for...of: მხოლოდ ელემენტები
თუ ინდექსი არ გჭირდება და მხოლოდ ელემენტები გაინტერესებს, არსებობს უფრო მოკლე ჩანაწერი:
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].
მაგალითი: ჯამი
ციკლით მასივის ყველა ელემენტის ჯამს დამგროვებლით დაითვლი:
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სცადე თავად
გაუშვი, მერე დაამატე მასივში კიდევ ორი დავალება და ნახე, რომ ნუმერაცია თავისით გაგრძელდა.
ხშირი შეცდომები
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 ლარი.
💡 მინიშნება
for (const price of prices) ციკლში დაბეჭდე ფასი და დაამატე total-ს. ჯამი ციკლის შემდეგ დაბეჭდე.
✅ ამოხსნის ნახვა
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 ელემენტია?
i იღებს მნიშვნელობებს 0, 1, 2, 3.
2რას იღებს x ციკლში for (const x of ["ა", "ბ"])?
for...of ელემენტებს გადის.
3რა არის შეცდომა? for (let i = 0; i <= arr.length; i++) { console.log(arr[i]); }
<= ერთით მეტ იტერაციას იძლევა: arr[arr.length] undefined-ია.
შეჯამება
- ინდექსიანი ციკლი:
for (let i = 0; i < arr.length; i++), ელემენტიarr[i]. for (const item of arr)ელემენტებს პირდაპირ გადის და შეცდომის ნაკლებ შანსს ტოვებს.- ინდექსი გჭირდება? ინდექსიანი
for. არ გჭირდება?for...of. - პირობა
<და არა<=.