توفر دوال جافاسكريبت كائنًا خاصًا يسمى arguments
يحمل جميع الوسائط المُمررة إلى الدالة، بغض النظر عما إذا كانت قائمة معلمات الدالة تُعرّفها صراحةً. ومع ذلك، فإن arguments
ليس مصفوفة حقيقية؛ بل هو شبيه بمصفوفة، يمتلك خاصية length
ويسمح بالوصول إلى العناصر عبر المؤشرات العددية، ولكنه يفتقر إلى طرق المصفوفة القياسية مثل map
و filter
و reduce
. وغالبًا ما يتطلب هذا تحويل arguments
إلى مصفوفة جافاسكريبت قياسية لتسهيل التلاعب بها.
محتويات
- فهم كائن
arguments
- استخدام معلمات الباقي (
...
) - استخدام
Array.from()
- استخدام مُحددات المصفوفات
- اختيار الطريقة الأنسب
فهم كائن arguments
يتوفر كائن arguments
داخل أي دالة جافاسكريبت. وهو شبيه بمصفوفة، مما يعني أنه يمكنك الوصول إلى عناصره باستخدام الترميز بين قوسين (مثل: arguments[0]
)، وهو يمتلك خاصية length
تشير إلى عدد الوسائط. ومع ذلك، فهو ليس مصفوفة حقيقية ولا يرث من Array.prototype
، مما يمنع استخدام طرق المصفوفة المُدمجة.
function myFunc() {
console.log(arguments); // يُخرج كائن Arguments
console.log(arguments.length); // يُخرج عدد الوسائط
}
myFunc(1, 2, 3);
استخدام معلمات الباقي (...
)
النهج الأكثر حداثة وكفاءة هو استخدام معلمات الباقي. تُمكّن معلمات الباقي، المُدخلة في ES6، من جمع عدد غير محدد من الوسائط في مصفوفة حقيقية.
function myFunc(...args) {
console.log(args); // args هي مصفوفة حقيقية!
console.log(args.map(x => x * 2)); // استخدام طرق المصفوفة
}
myFunc(1, 2, 3);
هذه الطريقة موجزة، وسهلة القراءة، وعالية الأداء. وهي النهج المُوصى به لتحويل الوسائط إلى مصفوفة في جافاسكريبت الحديثة.
استخدام Array.from()
إنّ طريقة Array.from()
تُنشئ مصفوفة جديدة من كائن شبيه بمصفوفة أو كائن قابل للتكرار، مما يجعلها مثالية لتحويل كائن arguments
.
function myFunc() {
const argsArray = Array.from(arguments);
console.log(argsArray);
console.log(argsArray.filter(x => x > 1)); // استخدام طرق المصفوفة
}
myFunc(1, 2, 3);
تُوفر Array.from()
توافقًا جيدًا مع المتصفحات القديمة التي قد لا تدعم معلمات الباقي.
استخدام مُحددات المصفوفات
على الرغم من أنّها أقل كفاءة وأقل قابلية للقراءة من الطرق السابقة، إلا أنه يمكنك إنشاء مصفوفة يدويًا باستخدام مُحدد مصفوفة وحلقة.
function myFunc() {
const argsArray = [];
for (let i = 0; i < arguments.length; i++) {
argsArray.push(arguments[i]);
}
console.log(argsArray);
}
myFunc(1, 2, 3);
هذه الطريقة غير مُشجعة بشكل عام نظرًا لإطنابها وانخفاض أدائها، خاصة عند التعامل مع عدد كبير من الوسائط.
اختيار الطريقة الأنسب
في تطوير جافاسكريبت الحديث، يُعد استخدام معلمات الباقي (...args
) الطريقة المُفضلة والأكثر كفاءة لتحويل الوسائط إلى مصفوفة. إنها موجزة، وسهلة القراءة، وتستغل ميزات جافاسكريبت الحديثة. تُوفر Array.from(arguments)
بديلًا مناسبًا لتوافق أوسع مع المتصفحات. تجنب استخدام مُحددات المصفوفات ما لم يكن هناك قيد محدد للغاية يمنع استخدام الطريقتين الأخريين.