პროგრამირების საფუძვლები › დამწყები › ობიექტები
ობიექტების მასივი
ეს თავი CodeQuest Pro-ს ნაწილია
Pro ხსნის სკოლის ყველა კურსს და თამაშის ყველა ლეველს, ვიდეოს და პროექტს. ერთჯერადი გადახდა, გამოწერის გარეშე.
რას ისწავლი
- როგორ შეინახო ბევრი ერთგვაროვანი საგანი ობიექტების მასივში
- როგორ გაიარო ასეთი მასივი და წაიკითხო თითოეულის თვისებები
- როგორ იპოვო, დათვალო და დაამატო ჩანაწერები
ცხრილი კოდში
წარმოიდგინე კლასის ჟურნალი: ყოველ სტრიქონში ერთი მოსწავლეა, სვეტებში მისი სახელი და ქულა. კოდში ასეთი ცხრილი ობიექტების მასივია: მასივი სტრიქონების სიაა, ყოველი ობიექტი კი ერთი სტრიქონი სახელიანი სვეტებით.
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); // 81students[0] მასივის პირველი ელემენტია, ობიექტი. მის შემდეგ .name ამ ობიექტის თვისებაა. ჩანაწერი მარცხნიდან მარჯვნივ იკითხება: „სტუდენტები, პირველი, სახელი“.
ეს ფორმა ყველგანაა: ონლაინ მაღაზიის პროდუქტები, ჩატის შეტყობინებები, თამაშის მოწინააღმდეგეები. ინტერნეტიდან მიღებული მონაცემების უმეტესობაც ზუსტად ასე გამოიყურება.
გავლა ციკლით
for...of ყოველ იტერაციაზე ერთ ობიექტს გაძლევს, და მისი თვისებები ჩვეულებრივად იკითხება:
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 ერთი მოსწავლეა და ყველაფერი, რაც ობიექტზე ისწავლე, აქაც მუშაობს.
ძებნა, დათვლა, საუკეთესო
წინა მოდულის შაბლონები ობიექტებზეც მუშაობს, მხოლოდ ახლა ვადარებთ თვისებას:
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-ს ახალი ობიექტი გადაეცი:
let students = [{ name: "ნინო", score: 92 }];
students.push({ name: "ლუკა", score: 74 });
console.log(students.length); // 2ჩანაწერის შესაცვლელად მიწვდი მას ინდექსით და შეცვალე თვისება: students[1].score = 80;.
ერთი ფორმა ყველასთვის
ობიექტების მასივში ყველა ობიექტს ერთნაირი თვისებები უნდა ჰქონდეს: თუ ერთთან score წერია, მეორესთან points, ციკლი მეორეს ქულას ვერ იპოვის და undefined მიიღებ. ჩანაწერების ერთნაირი სტრუქტურა თითქმის ყველა პროგრამის მოთხოვნაა.
სცადე თავად
გაუშვი, მერე დაამატე მეოთხე მოსწავლე push-ით, ისეთი ქულით, რომ ახალი საუკეთესო გახდეს.
ხშირი შეცდომები
students.name. მასივს თვისებაnameარ აქვს, ის მის ელემენტებს აქვს. ჯერ ელემენტი აიღე, ინდექსით ან ციკლით, მერე თვისება.- სხვადასხვა ფორმის ობიექტები.
scoreერთთან დაScoreმეორესთან ორ სხვადასხვა თვისებაა. ერთნაირი სახელები გამოიყენე. - მძიმე ობიექტებს შორის. მასივის ელემენტებს, ობიექტებსაც, მძიმე ჰყოფს:
[{...}, {...}].
სავარჯიშო
მასივი products შეიცავს ობიექტებს { name, price }: პური 1.2, ყველი 14, ვაშლი 3, თაფლი 18. დაბეჭდე მხოლოდ ის პროდუქტები, რომელთა ფასი 5 ლარზე ნაკლებია, ფორმატით პური — 1.2 ლარი, და ბოლოს მათი რაოდენობა: იაფი: 2.
💡 მინიშნება
ციკლში შეამოწმე p.price < 5. თუ სრულდება, დაბეჭდე და გაზარდე მთვლელი.
✅ ამოხსნის ნახვა
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);?
pets[1] მეორე ობიექტია, მისი name „მურია“-ა.
2რატომ იძლევა students.name undefined-ს?
ჯერ ელემენტი უნდა აიღო: students[0].name.
3რომელი ხაზი ამატებს ახალ მოსწავლეს?
push მასივს ბოლოში ახალ ობიექტს უმატებს. მესამე ვარიანტი მთელ მასივს ერთი ობიექტით ჩაანაცვლებდა.
შეჯამება
- ობიექტების მასივი ცხრილს ჰგავს: ყოველი ობიექტი ერთი ჩანაწერია.
arr[i].keyიღებს i-ური ჩანაწერის თვისებას.for (const item of arr)ციკლით ყოველ ჩანაწერს გადიხარ და თვისებებს კითხულობ.- ყველა ჩანაწერს ერთნაირი თვისებები უნდა ჰქონდეს.