შესვლა

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

ობიექტების მასივი

საშუალო⏱ 7 წთ+20 XP👑 Pro#ობიექტები#მასივები#მონაცემები

რას ისწავლი

  • როგორ შეინახო ბევრი ერთგვაროვანი საგანი ობიექტების მასივში
  • როგორ გაიარო ასეთი მასივი და წაიკითხო თითოეულის თვისებები
  • როგორ იპოვო, დათვალო და დაამატო ჩანაწერები

ცხრილი კოდში

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

JavaScript
let students = [
  { name: "ნინო", score: 92 },
  { name: "გიო", score: 67 },
  { name: "მარი", score: 81 }
];

console.log(students.length);     // 3
console.log(students[0].name);    // ნინო
console.log(students[2].score);   // 81

students[0] მასივის პირველი ელემენტია, ობიექტი. მის შემდეგ .name ამ ობიექტის თვისებაა. ჩანაწერი მარცხნიდან მარჯვნივ იკითხება: „სტუდენტები, პირველი, სახელი“.

ეს ფორმა ყველგანაა: ონლაინ მაღაზიის პროდუქტები, ჩატის შეტყობინებები, თამაშის მოწინააღმდეგეები. ინტერნეტიდან მიღებული მონაცემების უმეტესობაც ზუსტად ასე გამოიყურება.

გავლა ციკლით

for...of ყოველ იტერაციაზე ერთ ობიექტს გაძლევს, და მისი თვისებები ჩვეულებრივად იკითხება:

JavaScript
let students = [
  { name: "ნინო", score: 92 },
  { name: "გიო", score: 67 },
  { name: "მარი", score: 81 }
];

for (const student of students) {
  console.log(`${student.name}: ${student.score}`);
}

ცვლადს მხოლობითი სახელი დაარქვი: student of students. ციკლის შიგნით student ერთი მოსწავლეა და ყველაფერი, რაც ობიექტზე ისწავლე, აქაც მუშაობს.

ძებნა, დათვლა, საუკეთესო

წინა მოდულის შაბლონები ობიექტებზეც მუშაობს, მხოლოდ ახლა ვადარებთ თვისებას:

JavaScript
let students = [
  { name: "ნინო", score: 92 },
  { name: "გიო", score: 67 },
  { name: "მარი", score: 81 }
];

let best = students[0];
let passed = 0;

for (const s of students) {
  if (s.score > best.score) {
    best = s;
  }
  if (s.score >= 70) {
    passed++;
  }
}

console.log("საუკეთესო:", best.name);   // საუკეთესო: ნინო
console.log("ჩააბარა:", passed);         // ჩააბარა: 2

ყურადღება მიაქციე: best-ში მთელ ობიექტს ვინახავთ და არა მხოლოდ ქულას. ასე ბოლოს ვიცით სახელიც, ქულაც და ყველა სხვა თვისება.

ახალი ჩანაწერი

ახალი მოსწავლის დასამატებლად push-ს ახალი ობიექტი გადაეცი:

JavaScript
let students = [{ name: "ნინო", score: 92 }];
students.push({ name: "ლუკა", score: 74 });
console.log(students.length);   // 2

ჩანაწერის შესაცვლელად მიწვდი მას ინდექსით და შეცვალე თვისება: students[1].score = 80;.

ერთი ფორმა ყველასთვის

ობიექტების მასივში ყველა ობიექტს ერთნაირი თვისებები უნდა ჰქონდეს: თუ ერთთან score წერია, მეორესთან points, ციკლი მეორეს ქულას ვერ იპოვის და undefined მიიღებ. ჩანაწერების ერთნაირი სტრუქტურა თითქმის ყველა პროგრამის მოთხოვნაა.

სცადე თავად

გაუშვი, მერე დაამატე მეოთხე მოსწავლე push-ით, ისეთი ქულით, რომ ახალი საუკეთესო გახდეს.

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

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

  • students.name. მასივს თვისება name არ აქვს, ის მის ელემენტებს აქვს. ჯერ ელემენტი აიღე, ინდექსით ან ციკლით, მერე თვისება.
  • სხვადასხვა ფორმის ობიექტები. score ერთთან და Score მეორესთან ორ სხვადასხვა თვისებაა. ერთნაირი სახელები გამოიყენე.
  • მძიმე ობიექტებს შორის. მასივის ელემენტებს, ობიექტებსაც, მძიმე ჰყოფს: [{...}, {...}].

სავარჯიშო

მასივი products შეიცავს ობიექტებს { name, price }: პური 1.2, ყველი 14, ვაშლი 3, თაფლი 18. დაბეჭდე მხოლოდ ის პროდუქტები, რომელთა ფასი 5 ლარზე ნაკლებია, ფორმატით პური — 1.2 ლარი, და ბოლოს მათი რაოდენობა: იაფი: 2.

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

ციკლში შეამოწმე p.price < 5. თუ სრულდება, დაბეჭდე და გაზარდე მთვლელი.

✅ ამოხსნის ნახვა
JavaScript
let products = [
  { name: "პური", price: 1.2 },
  { name: "ყველი", price: 14 },
  { name: "ვაშლი", price: 3 },
  { name: "თაფლი", price: 18 }
];

let cheap = 0;
for (const p of products) {
  if (p.price < 5) {
    console.log(`${p.name} — ${p.price} ლარი`);
    cheap++;
  }
}
console.log("იაფი:", cheap);

მინი-ქვიზი

1let pets = [{ name: "ფისო" }, { name: "მურია" }]; რას დაბეჭდავს console.log(pets[1].name);?

2რატომ იძლევა students.name undefined-ს?

3რომელი ხაზი ამატებს ახალ მოსწავლეს?

შეჯამება

  • ობიექტების მასივი ცხრილს ჰგავს: ყოველი ობიექტი ერთი ჩანაწერია.
  • arr[i].key იღებს i-ური ჩანაწერის თვისებას.
  • for (const item of arr) ციკლით ყოველ ჩანაწერს გადიხარ და თვისებებს კითხულობ.
  • ყველა ჩანაწერს ერთნაირი თვისებები უნდა ჰქონდეს.
📝 ჩემი შენიშვნა