مقدمه

در بسیاری از پروژه‌های جاوااسکریپت لازم است عناصر یک کالکشن (آرایه، شیء یا Map) را پیمایش کنیم. سه متد keys، values و entries به شما اجازه می‌دهند به‌ترتیب به کلیدها، مقدارها یا جفت‌های کلید-مقدار یک کالکشن دسترسی داشته باشید. در این درس با کاربرد این متدها در انواع ساختار داده (آرایه، Map و شیء) و نکات مهم استفاده آن‌ها آشنا می‌شوید.

متدهای keys، values و entries برای آرایه‌ها

متدهای keys، values و entries به شما امکان می‌دهند به راحتی به عناصر آرایه دسترسی پیدا کنید و آن‌ها را پیمایش کنید. در ادامه نحوه‌ی استفاده از هر یک از این متدها روی آرایه‌ها را می‌بینیم.

متد keys برای آرایه

متد keys روی آرایه یک تکرارگر یا Iterator از اندیس‌ها برمی‌گرداند. این تکرارگر یا Iterator را می‌توانید با حلقه for...of یا متد next() پیمایش کنید:

Copy Icon JAVASCRIPT
let arr = ["a", "b", "c"];
for (let key of arr.keys()) {
  console.log(key); // 0, 1, 2
}

متد values برای آرایه

متد values مقدار هر عنصر آرایه را به ترتیب باز می‌گرداند. این متد برای پیمایش مستقیم عناصر بسیار مفید است:

Copy Icon JAVASCRIPT
for (let val of arr.values()) {
  console.log(val); // "a", "b", "c"
}

متد entries برای آرایه

متد entries برای هر عنصر آرایه یک آرایه شامل اندیس و مقدار (جفت) باز می‌گرداند. این متد زمانی مفید است که همزمان به اندیس و مقدار نیاز دارید.

Copy Icon JAVASCRIPT
for (let [idx, val] of arr.entries()) {
  console.log(idx, val); // 0 "a" , 1 "b" , 2 "c"
}

متدهای keys، values و entries برای Map و Set

نوع Map به طور پیش‌فرض از همین سه متد برای پیمایش کلیدها، مقدارها و جفت کلید-مقدار پشتیبانی می‌کند. همانطور که گفتیم، این متدها Iteratable هستند و خروجی آن‌ها برای استفاده در حلقه‌ها و الگوریتم‌های داده‌ای فوق‌العاده کاربردی است.

Copy Icon JAVASCRIPT
let m = new Map([
  ["a", 1], ["b", 2]
]);
for (let key of m.keys()) { ... }
for (let val of m.values()) { ... }
for (let [k, v] of m.entries()) { ... }

اما در مورد Set اوضاع کمی متفاوت است، چون در Set ما فقط مفادیر منفرد داریم نه جفت‌های کلید - مقدار و به عبارت دیگر، بر خلاف Map که جفت‌های key: value را نگه می‌دارد، در Set فقط value نگه داشته می‌شود. بنابراین، هر دو متد keys و values در Set یکسان عمل می‌کنند و فقط مقادیر را بازمی‌گردانند. به متد entries هم که ظاهراً نیازی نیست اما با این وجود برای اینکه عملکرد این متد روی Set هم مشابه Map باشد، متد entries روی یک Set باعث برگشتن یک تکرارگر یا Iterator می‌شود که هر مقدار را به صورت value: value برمی‌گرداند. مثال زیر این موضوع را کاملاً روشن می‌کند.

let s = new Set([1, 2, 3]);
for (let val of s.entries()) {
  console.log(val); // [1, 1], [2, 2], [3, 3]
}

در این مثال، متد entries روی Set یک تکرارگر برمی‌گرداند که هر مقدار را به صورت [value, value] بازمی‌گرداند.

استفاده از Object.keys، Object.values و Object.entries

برای شیءهای معمولی (Object)، سه متد Object.keys، Object.values و Object.entries موجود است که آرایه‌ای از کلیدها، مقدارها یا جفت کلید-مقدار را بازمی‌گردانند. این متدها پیمایش شیءها را بسیار آسان و انعطاف‌پذیر می‌کنند.

Copy Icon JAVASCRIPT
let obj = { a: 1, b: 2 };
console.log(Object.keys(obj));    // ["a", "b"]
console.log(Object.values(obj));  // [1, 2]
console.log(Object.entries(obj));// [["a",1],["b",2]]

متدهای keys، values و entries ابزاری استاندارد برای پیمایش و پردازش انواع کالکشن‌ها در جاوااسکریپت هستند. تسلط بر این متدها کار با داده‌های پیچیده را ساده و حرفه‌ای می‌کند و پایه بسیاری از الگوهای پیشرفته جاوااسکریپت است.