25 август 2025

Object.keys, values, entries

Keling, alohida ma’lumotlar tuzilmalaridan uzoqlashamiz va ular ustida takrorlanishlar haqida gaplashamiz.

Oldingi bobda biz usullarni ko’rdik map.keys(), map.values(), map.entries().

Ushbu usullar umumiydir, ularni ma’lumotlar tuzilmalari uchun ishlatish bo’yicha umumiy kelishuv mavjud. Agar biz o’zimizga xos ma’lumotlar tuzilishini yaratadigan bo’lsak, ularni ham amalga oshirishimiz kerak.

Ular quyidagilar uchun qo’llab-quvvatlanadi:

  • Map
  • Set
  • Array (arr.values() dan tashqari)

Oddiy obyektlar ham shunga o’xshash usullarni qo’llab-quvvatlaydi, ammo sintaksis biroz boshqacha.

Object.keys, values, entries

Oddiy obyektlar uchun quyidagi usullar mavjud:

…Iltimos, farqlarga e’tibor bering (masalan, map obyekti bilan taqqoslaganda):

Map Object
Chaqiruv sintaksis map.keys() Object.keys(obj), lekin obj.keys() emas
Qaytarish ketma-ket saraluchan “haqiqiy” Array

Birinchi farq shundaki, biz obj.keys() emas, balki Object.keys(obj) deb chaqirishimiz kerak.

Nega shunday? Asosiy sabab – bu egiluvchanlik. Esingizda bo’lsa, obyektlar JavaScript-dagi barcha murakkab tuzilmalarning asosidir. Shunday qilib, bizda o’z order.values​​() usulini amalga oshiradigan order kabi obyektimiz bo’lishi mumkin. Va biz hali ham Object.values​​(order) deb chaqirishimiz mumkin.

Ikkinchi farq shundaki, Object.* usullari ketma-ket saraluchanni emas, balki “haqiqiy” obyektlar massivini qaytaradi. Bu asosan tarixiy sabablarga ko’ra shunday.

Masalan:

let user = {
  name: "John",
  age: 30,
};
  • Object.keys(user) = ["name", "age"]
  • Object.values(user) = ["John", 30]
  • Object.entries(user) = [ ["name","John"], ["age",30] ]

Xususiyat qiymatlarini tsiklash uchun Object.values dan foydalanish misoli:

let user = {
  name: "John",
  age: 30,
};

// qiymatlarni tsiklash
for (let value of Object.values(user)) {
  alert(value); // John, so'ng 30
}

Object.keys/values/entries ramziy xususiyatlarni e’tiborsiz qoldiradi

Xuddi for..in tsikl kabi, bu usullar ham Symbol(...) ni kalit sifatida ishlatadigan xususiyatlarga e’tibor bermaydi.

Odatda bu qulay. Agar biz ham ramziy kalitlarni xohlasak, unda alohida usul mavjud Object.getOwnPropertySymbols, bu faqat ramziy kalitlar massivini qaytaradi. Shuningdek, Reflect.ownKeys(obj) usuli hamma kalitlarni qaytaradi.

Vazifalar

muhimlik: 5

Tasodifiy ish haqi miqdori bilan salaries obyekti mavjud.

Object.values va for..of tsikldan foydalanib, barcha ish haqi yig’indisini qaytaradigan sumSalaries(salaries) funktsiyasini yozing.

Agar salaries bo’sh bo’lsa, unda natija 0 bo’lishi kerak.

Masalan:

let salaries = {
  "John": 100,
  "Pete": 300,
  "Mary": 250
};

alert( sumSalaries(salaries) ); // 650

Sinovlar bilan sandbox-ni oching.

function sumSalaries(salaries) {

  let sum = 0;
  for (let salary of Object.values(salaries)) {
    sum += salary;
  }

  return sum; // 650
}

let salaries = {
  "John": 100,
  "Pete": 300,
  "Mary": 250
};

alert( sumSalaries(salaries) ); // 650

Yoki, ixtiyoriy ravishda, biz Object.values va reduce yordamida yig’indisini olishimiz mumkin:

// maoshlar massivdagi tsiklarni kamaytirish,
// ularni qo'shish
// va natijani qaytarish
function sumSalaries(salaries) {
  return Object.values(salaries).reduce((a, b) => a + b, 0) // 650
}

Yechimni sandbox-dagi sinovlar bilan oching.

Obyektdagi xususiyatlar sonini qaytaradigan count(obj) funktsiyasini yozing:

let user = {
  name: "John",
  age: 30,
};

alert(count(user)); // 2

Kodni iloji boricha qisqa qilishga harakat qiling.

P.S. Ramziy xususiyatlarga e’tibor bermang, faqat “muntazam” xususiyatlarni hisoblang.

Sinovlar bilan sandbox-ni oching.

function count(obj) {
  return Object.keys(obj).length;
}

Yechimni sandbox-dagi sinovlar bilan oching.

O'quv qo'llanma xaritasi

Izohlar

izoh berishdan oldin buni o'qing…
  • Agar sizda nimani yaxshilash kerakligi haqida takliflaringiz bo'lsa - iltimos, GitHub muammosini yuboring yoki izoh berish o'rniga so'rov yuboring.
  • Agar siz maqolada biror narsani tushunolmasangiz - iltimos, batafsilroq ma'lumot bering.
  • Bir nechta so'z so'zlarini kiritish uchun <code> yorlig'ini ishlating, bir nechta satrlar uchun - ularni <pre> yorlig'i bilan o'rab qo'ying, 10 satrdan ortiq bo'lsa - sandbox (plnkr, jsbin, codepen…)