პროგრამირების საფუძვლები › დამწყები › მასივები
ინდექსები და სიგრძე
ეს თავი CodeQuest Pro-ს ნაწილია
Pro ხსნის სკოლის ყველა კურსს და თამაშის ყველა ლეველს, ვიდეოს და პროექტს. ერთჯერადი გადახდა, გამოწერის გარეშე.
რას ისწავლი
- რა არის ინდექსი (index) და რატომ იწყება ნულიდან
- როგორ წაიკითხო და შეცვალო ელემენტი მისი ინდექსით
- როგორ მიწვდე ბოლო ელემენტს და რა ხდება, როცა ინდექსი არ არსებობს
ელემენტის ნომერი
მასივის ყოველ ელემენტს თავისი რიგითი ნომერი აქვს, ინდექსი (index). ერთი უცნაურობა, რომელსაც მალე შეეჩვევი: ათვლა ნულიდან იწყება. პირველი ელემენტის ინდექსია 0, მეორის 1, მესამის 2.
let fruits = ["ვაშლი", "მსხალი", "ატამი"];
console.log(fruits[0]); // ვაშლი
console.log(fruits[1]); // მსხალი
console.log(fruits[2]); // ატამიინდექსი მასივის სახელის შემდეგ, კვადრატულ ფრჩხილებში იწერება. fruits[0] იკითხება როგორც „fruits-ის ნულოვანი ელემენტი“.
რატომ ნულიდან? ინდექსი სინამდვილეში ამბობს, რამდენი ნაბიჯით არის ელემენტი დაშორებული მასივის დასაწყისიდან. პირველი ელემენტი თვითონ დასაწყისშია, მანძილი 0. ასე ითვლის თითქმის ყველა პროგრამირების ენა.
ბოლო ელემენტი
თუ მასივში 3 ელემენტია, ინდექსებია 0, 1 და 2. ანუ ბოლო ელემენტის ინდექსი ყოველთვის სიგრძეს გამოკლებული ერთია:
let fruits = ["ვაშლი", "მსხალი", "ატამი"];
let last = fruits[fruits.length - 1];
console.log(last); // ატამიეს ჩანაწერი ნებისმიერი სიგრძის მასივისთვის მუშაობს, ამიტომ ბოლო ელემენტის ინდექსს ხელით არასოდეს წერენ. თანამედროვე JavaScript-ში უფრო მოკლე გზაც არსებობს: fruits.at(-1) ასევე ბოლო ელემენტს აბრუნებს.
ელემენტის შეცვლა
ინდექსით შეგიძლია არა მხოლოდ წაიკითხო, არამედ ელემენტი შეცვალო კიდეც: ჩვეულებრივი მინიჭებით.
let fruits = ["ვაშლი", "მსხალი", "ატამი"];
fruits[1] = "ბალი";
console.log(fruits); // ["ვაშლი","ბალი","ატამი"]მეორე ელემენტი, ინდექსით 1, შეიცვალა. დანარჩენები ადგილზეა.
ინდექსი არ არის აუცილებლად რიცხვი, რომელსაც ხელით წერ. ფრჩხილებში შეიძლება ჩაიწეროს ცვლადი ან გამოსახულება: fruits[i], fruits[i + 1], fruits[fruits.length - 1]. კომპიუტერი ჯერ ფრჩხილებში მდგომ მნიშვნელობას ითვლის და მერე იღებს შესაბამის ელემენტს. ზუსტად ასე მუშაობს მასივი ციკლებთან ერთად, რასაც ამ მოდულში მალე ნახავ.
მასივის საზღვრებს გარეთ
რა მოხდება, თუ ინდექსი, რომელსაც ითხოვ, არ არსებობს?
let fruits = ["ვაშლი", "მსხალი", "ატამი"];
console.log(fruits[3]); // undefined
console.log(fruits[10]); // undefinedJavaScript შეცდომას არ იძლევა, უბრალოდ აბრუნებს undefined-ს: „აქ არაფერია“. ეს მოსახერხებელია, მაგრამ საშიშიც: პროგრამა არ ჩერდება და არასწორი ინდექსი შეიძლება შეუმჩნეველი დარჩეს. თუ ეკრანზე undefined ჩნდება, ინდექსი გადაამოწმე.
სტრიქონსაც აქვს ინდექსები
სტრიქონი სიმბოლოების რიგია, ამიტომ მასში ინდექსებიც მუშაობს: "კოდი"[0] არის "კ", ხოლო "კოდი"[3] არის "ი". ერთი განსხვავება: სტრიქონის სიმბოლოს ინდექსით ვერ შეცვლი.
სცადე თავად
გაუშვი, მერე ბოლო ელემენტის ხაზი ისე შეცვალე, რომ წინაბოლო დაბეჭდოს.
ხშირი შეცდომები
- პირველი ელემენტი
[1]. პირველი ელემენტის ინდექსი 0-ია.[1]მეორე ელემენტია. - ბოლო ელემენტი
[length].fruits[fruits.length]ყოველთვისundefined-ია, რადგან ბოლო ინდექსი ერთით ნაკლებია. სწორიაfruits[fruits.length - 1]. - მრგვალი ფრჩხილები.
fruits(0)ფუნქციის გამოძახებაა და შეცდომას იძლევა. ინდექსი კვადრატულ ფრჩხილებში იწერება.
სავარჯიშო
მასივში colors = ["წითელი", "მწვანე", "ლურჯი", "ყვითელი"] შეცვალე მესამე ელემენტი "იისფერი"-თ და დაბეჭდე პირველი და ბოლო ელემენტი. უნდა დაიბეჭდოს წითელი და ყვითელი, მასივი კი გახდეს ["წითელი","მწვანე","იისფერი","ყვითელი"].
💡 მინიშნება
მესამე ელემენტის ინდექსი 2-ია. ბოლოსთვის გამოიყენე colors.length - 1.
✅ ამოხსნის ნახვა
let colors = ["წითელი", "მწვანე", "ლურჯი", "ყვითელი"];
colors[2] = "იისფერი";
console.log(colors[0]);
console.log(colors[colors.length - 1]);
console.log(colors);მინი-ქვიზი
1რას დაბეჭდავს? let a = [10, 20, 30]; console.log(a[1]);
ინდექსი 1 მეორე ელემენტია.
2რომელი ჩანაწერი აბრუნებს ნებისმიერი მასივის ბოლო ელემენტს?
ბოლო ინდექსი სიგრძეს გამოკლებული ერთია. arr[-1] JavaScript-ში undefined-ია. arr.at(-1) კი იმუშავებდა.
3რას დაბეჭდავს console.log(["ა", "ბ"][5]);?
არარსებული ინდექსი შეცდომას არ იძლევა, ის undefined-ს აბრუნებს.
შეჯამება
- ინდექსი ელემენტის ნომერია და ნულიდან იწყება: პირველი ელემენტი
arr[0]-ია. - ბოლო ელემენტი:
arr[arr.length - 1]ანarr.at(-1). - ელემენტს ინდექსით ცვლი:
arr[1] = "ახალი";. - არარსებული ინდექსი
undefined-ს აბრუნებს და შეცდომას არ იძლევა.