შესვლა

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

ინდექსები და სიგრძე

მარტივი⏱ 7 წთ+20 XP👑 Pro#მასივები#ინდექსი#length

რას ისწავლი

  • რა არის ინდექსი (index) და რატომ იწყება ნულიდან
  • როგორ წაიკითხო და შეცვალო ელემენტი მისი ინდექსით
  • როგორ მიწვდე ბოლო ელემენტს და რა ხდება, როცა ინდექსი არ არსებობს

ელემენტის ნომერი

მასივის ყოველ ელემენტს თავისი რიგითი ნომერი აქვს, ინდექსი (index). ერთი უცნაურობა, რომელსაც მალე შეეჩვევი: ათვლა ნულიდან იწყება. პირველი ელემენტის ინდექსია 0, მეორის 1, მესამის 2.

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

console.log(fruits[0]);   // ვაშლი
console.log(fruits[1]);   // მსხალი
console.log(fruits[2]);   // ატამი

ინდექსი მასივის სახელის შემდეგ, კვადრატულ ფრჩხილებში იწერება. fruits[0] იკითხება როგორც „fruits-ის ნულოვანი ელემენტი“.

რატომ ნულიდან? ინდექსი სინამდვილეში ამბობს, რამდენი ნაბიჯით არის ელემენტი დაშორებული მასივის დასაწყისიდან. პირველი ელემენტი თვითონ დასაწყისშია, მანძილი 0. ასე ითვლის თითქმის ყველა პროგრამირების ენა.

ბოლო ელემენტი

თუ მასივში 3 ელემენტია, ინდექსებია 0, 1 და 2. ანუ ბოლო ელემენტის ინდექსი ყოველთვის სიგრძეს გამოკლებული ერთია:

JavaScript
let fruits = ["ვაშლი", "მსხალი", "ატამი"];
let last = fruits[fruits.length - 1];
console.log(last);   // ატამი

ეს ჩანაწერი ნებისმიერი სიგრძის მასივისთვის მუშაობს, ამიტომ ბოლო ელემენტის ინდექსს ხელით არასოდეს წერენ. თანამედროვე JavaScript-ში უფრო მოკლე გზაც არსებობს: fruits.at(-1) ასევე ბოლო ელემენტს აბრუნებს.

ელემენტის შეცვლა

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

JavaScript
let fruits = ["ვაშლი", "მსხალი", "ატამი"];
fruits[1] = "ბალი";
console.log(fruits);   // ["ვაშლი","ბალი","ატამი"]

მეორე ელემენტი, ინდექსით 1, შეიცვალა. დანარჩენები ადგილზეა.

ინდექსი არ არის აუცილებლად რიცხვი, რომელსაც ხელით წერ. ფრჩხილებში შეიძლება ჩაიწეროს ცვლადი ან გამოსახულება: fruits[i], fruits[i + 1], fruits[fruits.length - 1]. კომპიუტერი ჯერ ფრჩხილებში მდგომ მნიშვნელობას ითვლის და მერე იღებს შესაბამის ელემენტს. ზუსტად ასე მუშაობს მასივი ციკლებთან ერთად, რასაც ამ მოდულში მალე ნახავ.

მასივის საზღვრებს გარეთ

რა მოხდება, თუ ინდექსი, რომელსაც ითხოვ, არ არსებობს?

JavaScript
let fruits = ["ვაშლი", "მსხალი", "ატამი"];
console.log(fruits[3]);    // undefined
console.log(fruits[10]);   // undefined

JavaScript შეცდომას არ იძლევა, უბრალოდ აბრუნებს undefined-ს: „აქ არაფერია“. ეს მოსახერხებელია, მაგრამ საშიშიც: პროგრამა არ ჩერდება და არასწორი ინდექსი შეიძლება შეუმჩნეველი დარჩეს. თუ ეკრანზე undefined ჩნდება, ინდექსი გადაამოწმე.

სტრიქონსაც აქვს ინდექსები

სტრიქონი სიმბოლოების რიგია, ამიტომ მასში ინდექსებიც მუშაობს: "კოდი"[0] არის "კ", ხოლო "კოდი"[3] არის "ი". ერთი განსხვავება: სტრიქონის სიმბოლოს ინდექსით ვერ შეცვლი.

სცადე თავად

გაუშვი, მერე ბოლო ელემენტის ხაზი ისე შეცვალე, რომ წინაბოლო დაბეჭდოს.

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

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

  • პირველი ელემენტი [1]. პირველი ელემენტის ინდექსი 0-ია. [1] მეორე ელემენტია.
  • ბოლო ელემენტი [length]. fruits[fruits.length] ყოველთვის undefined-ია, რადგან ბოლო ინდექსი ერთით ნაკლებია. სწორია fruits[fruits.length - 1].
  • მრგვალი ფრჩხილები. fruits(0) ფუნქციის გამოძახებაა და შეცდომას იძლევა. ინდექსი კვადრატულ ფრჩხილებში იწერება.

სავარჯიშო

მასივში colors = ["წითელი", "მწვანე", "ლურჯი", "ყვითელი"] შეცვალე მესამე ელემენტი "იისფერი"-თ და დაბეჭდე პირველი და ბოლო ელემენტი. უნდა დაიბეჭდოს წითელი და ყვითელი, მასივი კი გახდეს ["წითელი","მწვანე","იისფერი","ყვითელი"].

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

მესამე ელემენტის ინდექსი 2-ია. ბოლოსთვის გამოიყენე colors.length - 1.

✅ ამოხსნის ნახვა
JavaScript
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]);

2რომელი ჩანაწერი აბრუნებს ნებისმიერი მასივის ბოლო ელემენტს?

3რას დაბეჭდავს console.log(["ა", "ბ"][5]);?

შეჯამება

  • ინდექსი ელემენტის ნომერია და ნულიდან იწყება: პირველი ელემენტი arr[0]-ია.
  • ბოლო ელემენტი: arr[arr.length - 1] ან arr.at(-1).
  • ელემენტს ინდექსით ცვლი: arr[1] = "ახალი";.
  • არარსებული ინდექსი undefined-ს აბრუნებს და შეცდომას არ იძლევა.
📝 ჩემი შენიშვნა