المصفوفة في الجافا سكريبت تتكون من قائمة عناصر، وتتيح الجافا سكريبت للمبرمجين العديد من الوظائف التي تعمل على المصفوفات. الوظائف التي تقوم بالتعديل على المصفوفة الأصلية تُعرف بتوابع التعديل (Mutator Methods)، والوظائف التي تُعيد قيمة جديدة أو شكل آخر من المصفوفة تُعرف بتوابع الوصول (Accessor Methods). يوجد نوع ثالث من التوابع يُسمى بتوابع التكرار (Iteration Methods) والتي سنتناولها بالشرح في هذا المقال. تُتيح توابع التكرار العمل على كل عنصر في المصفوفة كلٌ على حدة، وترتبط هذه التوابع بشكل أساسي بحلقات التكرار. للاستفادة أكثر من هذا الدرس، يجب أن يكون لديك معرفة مُسبقة بكيفية إنشاء المصفوفات، فهرستها، التعديل عليها والمرور على عناصرها بواسطة حلقة التكرار. تستطيع مراجعة درس فهم المصفوفات في الجافا سكريبت لأخذ فكرة عما سبق. ما سنتناوله في هذا الدرس يشمل شرح استخدام وظائف التكرار لتنفيذ حلقة التكرار على المصفوفات وإجراء عمليات على كل عنصر في المصفوفة، توضيح كيفية ترشيح نتائج العمل على المصفوفة، تلخيص عناصر المصفوفة في قيمة واحدة والبحث عن قيم وفهارس معينة.
فهم الدوال السهمية (Arrow Functions)
العديد من الأمثلة في هذا المقال ستستخدم صيغة الدوال السهمية في الجافا سكريبت والتي يتم تمثيلها بواسطة علامة المساواة ثم علامة الأكبر من <=
.
الدالة في الجافا سكريبت عبارة عن كتلة من الشيفرة البرمجية يتم تنفيذها وإعادة استخدامها أكثر من مرة، وعادةً ما تُكتب وفق الصيغة التالية:
var example = function() { // code to execute } example(); النسخة الأخيرة من الجافا السكريبت -حتى وقت كتابة هذا الدرس- تسمح باستخدام الدوال السهمية والتي تُكتب وفق الصيغة التالية: var example = () => { // code to execute } example();
في الدوال السهمية تُكتب الأقواس لاستقبال معاملات الدالة. في حالة كان لدينا مُعامل واحد فقط فنستطيع حينها التخلي عن كتابة الأقواس كما في الصيغة التالية:
var example = parameter1 => {
// code to execute
}
سنعتمد في شرح هذا الدرس على الدوال السهمية، وللاطلاع أكثر على هذا الموضوع، تستطيع الذهاب الى هذا المرجع .
الوظيفة ()forEach
تقوم الوظيفة ()forEach
باستدعاء دالة ليتم تنفيذها على كل عنصر في مصفوفة معينة. فمثلًا، نفترض وجود المصفوفة fish بالعناصر التالية:
let fish = [ "piranha", "barracuda", "cod", "eel" ];
نستطيع استخدام الوظيفة ()forEach
لطباعة كل عنصر في المصفوفة fish على الطرفية:
// Print out each item in the array
fish.forEach(individualFish => {
console.log(individualFish);
})
Output
piranha
barracuda
cod
eel
يوجد طريقة أخرى لعمل ما سبق وذلك باستخدام جملة التكرار for
بالإضافة لاستخدام الخاصية length
:
// Loop through the length of the array
for (let i = 0; i < fish.length; i++) {
console.log(fish[i]);
}
استخدام جملة for
السابقة في طباعة كل عنصر على حدة يعطينا نفس النتيجة عند استخدام ()forEach
، ولكن استخدام الطريقة ()forEach
يُعتبر خيارًا مختصرًا ومباشرًا وأفضل لمثل هذه الحالات.
الوظيفة ()map
تقوم الوظيفة ()map
ببناء مصفوفة ناتجة عن استدعاء دالة على عناصر مصفوفة أخرى. نستطيع طباعة عناصر مصفوفة عنصر-عنصر كمثال توضيحي على كيفية استخدام وظيفة ()map
ولكن على العكس من الوظيفة ()forEach
، لابد من حفظ ناتج الوظيفة في متغير جديد.
let fish = [ "piranha", "barracuda", "cod", "eel" ];
// Print out each item in the array
let printFish = fish.map(individualFish => {
console.log(individualFish);
});
printFish;
Output
piranha
barracuda
cod
eel
مثال أخر على استخدام الوظيفة ()map
، حيث نستطيع أيضًا أن نُغير قيمة كل عنصر في مصفوفة وحفظ العناصر الجديدة الناتجة عن هذا التغيير في مصفوفة أخرى. فمثلًا، يمكننا إضافة الحرف s الى نهاية كل عنصر في المصفوفة fish لجعل الأسماء أسماء جمع.
// Pluralize all items in the fish array
let pluralFish = fish.map(individualFish => {
return `${individualFish}s`;
});
pluralFish;
Output
[ 'piranhas', 'barracudas', 'cods', 'eels' ]
المصفوفة الأصلية fish لم تتغير، ولكن المصفوفة الجديدة pluralFish أصبحت الان تحتوي على النسخة المُعدلة من المصفوفة الأصلية.
الوظيفة ()filter
تقوم الوظيفة ()filter
بإنشاء مصفوفة جديدة تحتوي على عناصر من المصفوفة الأصلية تتوافق مع شرط معين. الهدف الرئيسي من هذه الوظيفة هو إجراء عملية الترشيح، فمثلًا، نستطيع أن نحصل من الوظيفة ()filter
على مصفوفة جديدة تحتوي على العناصر التي تبدأ بحرف مُعين، وذلك بالاستفادة من خاصية فهرسة النصوص التي تُمكننا من الحصول على الحرف الأول لكل عنصر.
let seaCreatures = [ "shark", "whale", "squid", "starfish", "narwhal" ];
// Filter all creatures that start with "s" into a new list
let filteredList = seaCreatures.filter(creature => {
return creature[0] === "s";
});
filteredList;
Output
[ 'shark', 'squid', 'starfish' ]
في المثال السابق اختبرنا جميع العناصر التي تبدأ بالحرف s
وحفظنا النتيجة في مصفوفة جيدة باسم filteredList.
الوظيفة ()reduce
تقوم الوظيفة ()reduce
باختصار مصفوفة في قيمة واحدة، وعادةً يُرى هذا الاستخدام مع المصفوفات التي تحتوي على أرقام، مثل الحصول على مجموع عناصر مصفوفة:
let numbers = [ 42, 23, 16, 15, 4, 8 ];
// Get the sum of all numerical values
let sum = numbers.reduce((a, b) => {
return a + b;
});
sum;
Output
108
تُستخدم الوظيفة ()reduce
أيضًا مع النصوص وأنواع البيانات الأخرى، وتكون القيمة المُرجعة من الوظيفة إما رقم أو نص أو أي نوع بيانات أخر.
الوظيفة ()find
تُعيد الوظيفة ()find
أول عنصر من مصفوفة يتوافق مع شرط مُعين. لتوضيح ذلك، سوف نُنشئ مصفوفة تحتوي على أسماء مخلوقات بحرية، وسنستخدم الوظيفة ()find
في إيجاد المخلوقات البحرية ذات النوع الرخوي مثل الأخطبوط (من الرخويات).
let seaCreatures = [ "whale", "octopus", "shark", "cuttlefish", "flounder" ];
// Check if a given value is a cephalopod
const isCephalopod = cephalopod => {
return [ "cuttlefish", "octopus" ].includes(cephalopod);
}
seaCreatures.find(isCephalopod);
Output
Octopus
بما أن “octopus” هو العنصر الأول في المصفوفة seaCreatures الذي ينطبق عليه الشرط، فإنه هو القيمة الأولى التي تم إرجاعها. نستفيد من الوظيفة ()find
في عملنا مع المصفوفات التي تحتوي على قيمة عديدة.
الوظيفة ()findIndex
تُعيد الوظيفة ()findIndex
فهرس أول عنصر من مصفوفة يتوافق مع شرط مُعين. سنستخدم نفس المثال السابق في وظيفة ()find
لإيجاد فهرس أول عنصر من المصفوفة من النوع الرخوي.
let seaCreatures = [ "whale", "octopus", "shark", "cuttlefish", "flounder" ];
باستخدام المصفوفة isCephalopod مع الوظيفة ()findIndex
سنحصل على رقم الفهرس للعنصر بدلا من قيمته.
// Check if a given value is a cephalopod
const isCephalopod = cephalopod => {
return [ "cuttlefish", "octopus" ].includes(cephalopod);
}
seaCreatures.findIndex(isCephalopod);
Output
1
العنصر “octopus” هو العنصر الأول من المصفوفة الذي ينطبق عليه الشرط وموقعه في الفهرس رقم 1 وهي القيمة التي حصلنا عليها. في حالة لم ينطبق الشرط على أية عنصر في المصفوفة، فإن القيمة المرجعة هي -1.
const isThereAnEel = eel => {
return [ "eel" ].includes(eel);
}
seaCreatures.findIndex
Output
-1
خاتمة
في هذا الدرس قمنا بمراجعة أغلب وظائف توابع التكرار في الجافا سكريبت. وظائف التكرار تعمل على كل عنصر في المصفوفة كلٌ على حدة وغالبًا ما يتم تطبيق دالة جديدة معها. تم شرح كيفية المرور على المصفوفة وعناصرها من خلال حلقة تكرار، تغيير قيمة العنصر في المصفوفة، ترشيح المصفوفة، اختصار المصفوفة في قيمة واحدة والبحث في المصفوفة باستخدام قيم العناصر او فهارسها. لأخذ فكرة عن المصفوفات تستطيع الاطلاع على درس فهم المصفوفات في الجافا سكريبت .
ترجمة -وبتصرّف- للمقال How To Use Array Methods in JavaScript: Iteration Methods لصاحبته Tania Rascia
حقوق الصورة البارزة محفوظة لـ Freepik
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.