مصفوفة 1…N في JavaScript: أسرار السرعة والأداء

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مصفوفة 1…N في JavaScript: من البسيط إلى عالي الأداء

\n\n

مرحباً زميلي المطور! إذا سبق لك أن واجهت مهمة "إنشاء مصفوفة أرقام من 1 إلى N" - فأنت لست وحدك. هذا سؤال شائع جداً على Stack Overflow، حيث حصد آلاف المشاهدات وعشرات الإجابات المتنوعة. قد يبدو الأمر بسيطاً، لكن الشيطان يكمن في التفاصيل: الأداء، قابلية القراءة، وعمومية الكود.

\n\n

اليوم سنستعرض جميع الطرق الأساسية لإنشاء مصفوفة [1, 2, 3, ..., N] في JavaScript، ونقارنها من حيث السرعة والأناقة ومجال الاستخدام. ستعرف أي طريقة تختار للمشروع العادي، وأيها عندما تكون كل ملي ثانية مهمة. هيا بنا!

\n\n

لماذا هذا مهم؟ سياق المهمة

\n\n

تخيل: أنت تكتب خوارزمية فرز، أو تولّد بيانات اختبارية، أو تنشئ شبكة للعبة، أو تريد ببساطة الحصول بسرعة على سلسلة من الأرقام. في كل هذه الحالات تحتاج إلى مصفوفة من 1 إلى N. قد يبدو الأمر بسيطاً - استخدم حلقة for وانطلق. لكن JavaScript الحديثة تقدم الكثير من السكر النحوي لدرجة أنه من السهل أن تحتار.

\n\n

سنستعرض 5 طرق رئيسية، من الكلاسيكية إلى الأسطر الواحدة الحديثة، ونختبرها في ظروف حقيقية. جهّز وحدة تحكم المتصفح ومحررك المفضل - سيكون الأمر مثيراً!

\n\n

الطريقة 1: حلقة for الكلاسيكية

\n\n

طريقة أساسية لكنها موثوقة، يعرفها كل مبتدئ:

\n\n
function createArrayLoop(n) {\n  const arr = [];\n  for (let i = 1; i <= n; i++) {\n    arr.push(i);\n  }\n  return arr;\n}\n\nconsole.log(createArrayLoop(5)); // [1, 2, 3, 4, 5]
\n\n

المزايا:

\n
    \n
  • أقصى قابلية للقراءة - مفهومة حتى لمن بدأوا تعلم JS للتو.
  • \n
  • لا توجد استدعاءات مخفية أو سحر.
  • \n
  • تعمل في جميع البيئات، بما في ذلك المتصفحات القديمة جداً.
  • \n
\n

العيوب:

\n
    \n
  • أبطأ من بعض البدائل (لكن ليس بشكل حرج لـ N الصغيرة).
  • \n
  • كثير من الكود لمهمة بسيطة.
  • \n
\n\n

الطريقة 2: Array.from() مع دالة map

\n\n

طريقة حديثة وأنيقة ظهرت في ES6:

\n\n
const createArrayFrom = n => Array.from({ length: n }, (_, i) => i + 1);\n\nconsole.log(createArrayFrom(5)); // [1, 2, 3, 4, 5]
\n\n

هنا ننشئ مصفوفة بطول محدد ونملؤها فوراً عبر دالة map. الوسيط الثاني لـ Array.from هو دالة map التي تستقبل الفهرس الحالي i وتعيد i + 1.

\n\n

المزايا:

\n
    \n
  • مختصرة جداً ومعبرة.
  • \n
  • لا تتطلب إنشاء مصفوفة فارغة مسبقاً.
  • \n
  • أداء جيد.
  • \n
\n

العيوب:

\n
    \n
  • قد تكون أقل وضوحاً للمبتدئين.
  • \n
  • تنشئ كائن وسيط { length: n }.
  • \n
\n\n

الطريقة 3: Spread-operator + keys()

\n\n

واحدة من أكثر الأسطر الواحدة شيوعاً على Stack Overflow:

\n\n
const createArraySpread = n => [...Array(n).keys()].map(i => i + 1);\n\nconsole.log(createArraySpread(5)); // [1, 2, 3, 4, 5]
\n\n

كيف يعمل؟ Array(n) ينشئ مصفوفة متفرقة من n عنصر فارغ. .keys() يعيد مكرراً للفهارس (0, 1, 2...). Spread-operator يفردها في مصفوفة عادية، ثم map يزيح القيم بمقدار +1.

\n\n

المزايا:

\n
    \n
  • مختصرة جداً (استدعاء واحد).
  • \n
  • تبدو "سحرية" - تثير إعجاب الزملاء في مراجعة الكود.
  • \n
\n

العيوب:

\n
    \n
  • الأبطأ بين جميع الطرق لـ N الكبيرة (بسبب المرور المزدوج وإنشاء مصفوفات وسيطة).
  • \n
  • أصعب في الفهم للمبتدئين.
  • \n
  • تستهلك ذاكرة أكبر.
  • \n
\n\n

الطريقة 4: Array.fill() + map()

\n\n

خيار شائع آخر:

\n\n
const createArrayFill = n => Array(n).fill().ma                

المدونات

توصيات الكتب