جافا سكريبت - المصفوفات. طرق فئة المصفوفة

08.10.2023

وكما فهمت من تلك المقالة، يمكن تخزين قيمة واحدة فقط في المتغير. مهما حاولنا لن نكتب أكثر من قيمة واحدة في المتغير.

لنفترض أننا أعلنا عن متغير معين z وقمنا بتعيين القيمة 8 له. وإذا قمنا بتعيين قيمة أخرى لنفس المتغير في مكان ما في الكود، مثل 3، فستختفي القيمة القديمة وستتم كتابة قيمة جديدة مكانها .

ولكي تتمكن من كتابة أكثر من قيمة في متغير، تحتاج إلى استخدام نوع بيانات مثل المصفوفة.

صفيفيسمح لك بكتابة عدد غير محدود من القيم من أي نوع في متغير مرة واحدة.

سابقًا، في JavaScript، تم الإعلان عن مصفوفة على النحو التالي:

var arr = مصفوفة جديدة (7، 8، "k"، "v"، 3.2، 4)؛

لقد تغير الزمن و الآن يتم الإعلان عن المصفوفة بشكل مختلف، أكثر اختصارا. يتم أيضًا إدراج العناصر مفصولة بفواصل، ولكن داخل أقواس مربعة بسيطة.

فار آر = [ 7, 8, "k", "v", 3.2, 4 ];

الآن يحتوي المتغير arr مصفوفة بيانات أحادية البعدأنواع مختلفة.

كل عنصر من المصفوفة له فهرس خاص به. يرجى ملاحظة أن هذا يبدأ المؤشر من الصفر. يتم استخدامه للإشارة إلى موضع عنصر في صفيف.

هيكل الصفيفيبدو مثل هذا:

من أجل الوصول إلى عنصر من مصفوفة، تحتاج إلى كتابة اسم المصفوفة، وبين قوسين مربعين تشير إلى فهرس العنصر الذي تريد الحصول عليه.

على سبيل المثال، لنعرض عنصرًا فهرسه 2، أي الحرف "k".

وثيقة.كتابة("

نعرض عنصر المصفوفة arr، الذي يكون فهرسه 2: " + arr + "

); //ك

ماذا لو أردنا رؤية كافة عناصر المصفوفة. إذا كان هناك عدد قليل من العناصر، فيمكنك الوصول إلى كل عنصر على حدة، كما في المثال، arr، arr، arr.

ولكن، إذا كان المصفوفة تحتوي على 100 عنصر، فلن يعمل هذا الخيار. هنا تحتاج بالفعل إلى استخدام .

قبل الانتقال إلى التكرار عبر المصفوفة، أريد أن أعرفك على الخاصية طول. هذه خاصية عالمية تسمح معرفة طول المصفوفةأي العدد الإجمالي للعناصر في المصفوفة. يمكنك أيضًا استخدامه لمعرفة طول السلسلة.

من أجل المتعة، دعونا نعرف كم يبلغ طول المصفوفة arr.

وثيقة.كتابة("

عدد العناصر في المصفوفة arr = " + arr.length + "

); // النتيجة: 6

الآن، من أجل عرض جميع العناصر في وقت واحد، تحتاج إلى التكرار عبر المصفوفة بأكملها باستخدام حلقة.

ل(فار ط = 0؛ ط< arr.length; i++){ document.write("

عنصر المصفوفة مع الفهرس "+أنا+"يساوي: " + arr[i] + "

"); }

نفتح هذه الصفحة في المتصفح ونرى هذه الصورة:


للتدريب، حاول تكرار المصفوفة "arr" باستخدام الحلقات المتبقية، while وdo-while.

هناك نسخة أخرى بسيطة وقصيرة من البحث مجموعة صغيرة. وهو يتألف من حقيقة أنه يمكن عرض كل عنصر من عناصر المصفوفة باستخدام طريقة التنبيه. أولا نكتب اسم المصفوفة نفسها، أو يمكنك على الفور تحديد قائمة العناصر بين قوسين مربعين. ثم نكتب الدالة forEach ونكتب طريقة التنبيه كمعلمة، بدون أقواس.

Arr.forEach(alert);

الآن إذا فتحنا الصفحة في المتصفح، فسنرى كل عنصر من عناصر المصفوفة واحدًا تلو الآخر.

ملء مصفوفة باستخدام حلقة

على سبيل المثال، في مصفوفة معينة، لنكتب نتائج جدول الضرب، من 1 إلى 10.

نحتاج أولاً إلى الإعلان عن مصفوفة فارغة سنقوم بملئها. ثم تحتاج إلى الإعلان عن متغير وتعيين القيمة 0 له على الفور. سيكون هذا المتغير بمثابة فهرس للمصفوفة المعلنة. والخطوة التالية ستكون ملء المصفوفة نفسها باستخدام تقنية حلقة في حلقة.

// أعلن عن مصفوفة فارغة var new_arr = ; // المتغير كمؤشر للمصفوفة new_arr var k = 0; ل(فار ط = 1؛ ط

وإذا فتحنا هذه الصفحة في المتصفح سنرى النتيجة التالية:


في البداية، المتغير i يساوي واحدًا. ويتم ضرب هذا بجميع قيم المتغير j. بعد أن مررنا بالحلقة الثانية 10 مرات، نعود إلى الحلقة الأولى ونزيد المتغير i بمقدار واحد. الآن أنا يساوي اثنين. مرة أخرى نذهب إلى الحلقة الثانية ونضرب القيمة 2 بجميع قيم المتغير j (من 1 إلى 10). والنتيجة هي الصف الثاني: 2 4 6 8 ... 20. ويحدث هذا حتى يصبح المتغير i يساوي 11. وبمجرد أن يأخذ هذه القيمة، نخرج من الحلقة.

دعونا نحسب مجموع جميع العناصر من المصفوفة

لدينا مصفوفة new_arr تخزن 100 رقم (جدول الضرب بأكمله). الآن دعونا نحسب مجموع كل هذه العناصر.

// أنشئ متغيرًا للمجموع var summ = 0; ل(فار ط = 0؛ ط< new_arr.length; i++){ summ += new_arr[i]; } document.write("

مجموع عناصر المصفوفة new_arr يساوي: " + summ + "

"); // النتيجة 3025

هذا كل ما أردت أن أخبركم عنه في هذا المقال. الآن أنت تعرف كيفية إنشاء مصفوفة، وكيفية ملئهاوكيفية العمل معها.

من الناحية العملية، المصفوفات شائعة جدًا، لأنها مهمة جدًا في البرمجة، لذلك يجب عليك فعل ذلك تعرف عليهم جيدا.

في هذه المقالة سوف نلقي نظرة على صفائف جافا سكريبت القياسية مع الفهارس الرقمية. يتم الإعلان عن المصفوفات باستخدام الأقواس المربعة:

var Fruits = ["Apple"، "Orange"، "Donkey"]

لاسترداد عنصر ما، ضع فهرسه فيه بين قوسين مربعين. الفهرس الأول 0 :

var Fruits = ["Apple"، "Orange"، "Donkey"] تنبيه(فواكه) تنبيه(فواكه) تنبيه(فواكه)

يمكننا أيضًا الحصول على طول مصفوفة JavaScript:

var Fruits = ["Apple"، "Orange"، "Donkey"] تنبيه(fruits.length)

أُووبس! لقد أنشأنا مصفوفة بها ثمرتان وحمار. الآن نحن بحاجة لإزالة الحمار.

طرق البوب ​​والدفع

يقوم الأسلوب pop في JavaScript بإزالة عنصر من المصفوفة وإعادته.

يوضح المثال التالي كيفية استرداد "Donkey" من مصفوفة:

var Fruits = ["Apple"، "Orange"، "Donkey"] تنبيه("أقوم بإزالة "+fruits.pop()) // الآن لدينا فقط ["Apple"،"Orange"] تنبيه("Now" حجم المصفوفة: "+fruits.length) // تمت إزالة الحمار

لاحظ أن pop يعدل المصفوفة نفسها.

نظير Pop هو أسلوب الدفع، الذي يضيف عنصرًا إلى المصفوفة. على سبيل المثال، نسينا إضافة خوخ:

var Fruits = ["Apple"، "Orange"] Fruits.push("Peach"); // الآن لدينا ["Apple"، "Orange"، "Peach"] تنبيه("العنصر الأخير:"+fruits)

  1. إنشاء مجموعة من الأنماط مع العناصر " موسيقى الجاز”, “البلوز”;
  2. أضف القيمة " روك أند رول«;
  3. استبدل القيمة الثانية من النهاية بالقيمة " كلاسيكي". يجب أن ينتهي بك الأمر بمصفوفة: " موسيقى الجاز”, ”كلاسيكي”, ”روك أند رول" يجب أن يعمل الكود لأي طول صفيف؛
  4. استرجاع القيمة الأخيرة من المصفوفة وعرضها عبر التنبيه .

حل

// 1 var style = ["Jazz"، "Bluez"] // 2 style.push("Rock"n"Roll") // أو:styles = "Rock"n"Roll" // 3styles = "Classic " // 4 تنبيه (styles.pop())

أساليب التحول/إلغاء التحول

تعمل أساليب Shift/unshift في نهاية المصفوفة، ولكن يمكنك أيضًا استخدام Shift لإزاحة العناصر لأعلى ( تتم إزالة القيمة الأولى للمصفوفة عن طريق إزاحة العناصر). يسمح التابع unshift لجافا سكريبت بإضافة عنصر إلى مصفوفة من النهاية:

var Fruits = ["Apple"، "Orange"] var apple = Fruits.shift() // الآن لدينا فقط ["Orange"] Fruits.unshift("Lemon") // الآن لدينا ["Lemon"، " برتقالي"] تنبيه (الثمار. الطول) // 2

يمكن أن يعمل كل من Shift وunshift على عناصر متعددة في وقت واحد:

var Fruits = ["Apple"]fruits.push("Orange"،"Peach")fruits.unshift("Pineapple"،"Lemon") // الآن يبدو المصفوفة كما يلي: ["Pineapple"، "Lemon"، "التفاحة"، "البرتقالية"، "الخوخ"]

مهمة الإدارة الذاتية

اكتب الكود لعرض قيمة عشوائية من المصفوفة arr عبر التنبيه:

var arr = ["برقوق"،"برتقالي"، "حمار"، "جزر"، "JavaScript"]

ملاحظة: رمز الحصول على رقم عشوائي من القيمة الدنيا إلى القيمة القصوى (ضمناً) هو كما يلي:

فار راند = دقيقة + Math.floor(Math.random()*(max+1-min))

حل

نحن بحاجة لاستخراج رقم عشوائي 0 إلى arr.length-1 (شامل):

var arr = ["برقوق"،"برتقالي"، "حمار"، "جزر"، "JavaScript"] var rand = Math.floor(Math.random()*arr.length) تنبيه(arr)

التكرار على مصفوفة

في JavaScript، يتم التكرار عبر المصفوفة باستخدام حلقة for:

var Fruits = ["Pineapple"، "Lemon"، "Apple"، "Orange"، "Peach"] for(var i=0; i

مهمة الإدارة الذاتية

قم بإنشاء دالة find(arr,value) التي تبحث عن قيمة في مصفوفة معينة وتقوم بإرجاع فهرسها أو -1 إذا لم يتم العثور على القيمة.

على سبيل المثال:

arr = [ "test"، 2, 1.5, false ] find(arr, "test") // 0 find(arr, 2) // 1 find(arr, 1.5) // 2 find(arr, 0) // -1

حل

قد يبدو الحل المحتمل كما يلي:

العثور على دالة (مصفوفة، قيمة) ( for(var i=0; i

لكن هذا غير صحيح لأن == لا يحدد الفرق بين 0 و false .

من الأصح استخدام === عند العمل مع المصفوفات في JavaScript. بالإضافة إلى ذلك، يتضمن أحدث معيار ES5 وظيفة Array#indexOf. ومن خلاله يمكننا تعريف دالة كالتالي:

دالة البحث (مصفوفة، قيمة) (إذا (array.indexOf) تُرجع array.indexOf(value) for(var i=0; i

والأكثر ذكاءً هو تحديد البحث بشرط للتحقق من وجود طريقة IndexOf.

مهمة الإدارة الذاتية

قم بإنشاء دالة filterNumeric(arr) تأخذ مصفوفة وترجع مصفوفة جديدة تحتوي فقط على القيم الرقمية من arr.

مثال على كيفية عمل ذلك:

آر = ["أ"، 1، "ب"، 2]؛ arr = filterNumeric(arr); // الآن آر =

حل

الحل هو التكرار عبر المصفوفة وإضافة القيم إلى مصفوفة جديدة إذا كانت رقمية.

الانضمام والانقسام

في بعض الأحيان تحتاج إلى طريقة سريعة لتحويل مصفوفة JavaScript إلى سلسلة. هذا هو الغرض من طريقة الانضمام.

يقوم بتسلسل المصفوفة في سلسلة باستخدام المحدد المحدد:

var Fruits = ["ليمون"،"Apple"، "برتقالي"، "خوخ"]؛ var str = Fruits.join("، "); تنبيه (شارع)؛

يتم التحويل العكسي بسهولة باستخدام طريقة التقسيم:

var Fruits = "Apple,Orange,Peach"; var arr = Fruits.split("،); // arr يحتوي الآن على ["Apple"، "Orange"، "Peach"] تنبيه(arr);

مهمة الإدارة الذاتية

يتضمن الكائن خاصية className، التي تحتوي على أسماء الفئات، مفصولة بمسافات:

اكتب دالة addClass(obj, cls) تضيف الفئة cls، ولكن فقط في حالة عدم وجودها:

ddClass(obj, "new") // obj.className="open القائمة الجديدة" addClass(obj, "open") // لا توجد تغييرات (الفئة موجودة بالفعل) addClass(obj, "me") // obj.className= تنبيه "فتح القائمة الجديدة" (obj.className) //

حل

تحتاج إلى تقسيم className والحلقة إلى أجزاء. إذا لم يتم العثور على الفئة، فسيتم إضافتها.

تم تحسين الحلقة قليلاً لزيادة الأداء:

وظيفة addClass(elem, cls) ( for(var c = elem.className.split(" "), i=c.length-1; i>=0; i--) ( if (c[i] == cls ) return ) elem.className += " "+cls ) var obj = ( className: "open القائمة" ) addClass(obj, "new") addClass(obj, "open") تنبيه(obj.className) // فتح القائمة جديد

في المثال أعلاه، تم تعريف المتغير c في بداية الحلقة وتم تعيين فهرسه الأخير على i .

تتم معالجة الحلقة نفسها في الاتجاه المعاكس، وتنتهي بالشرط i>=0. لأن i>=0 أسرع في التحقق من i . ما في JavaScript يسرع عملية البحث في المصفوفة.

استخدام الطول لقص المصفوفة

باستخدام الخاصية length، يمكنك اقتطاع مصفوفة مثل هذا:

يمكنك تحديد الطول ويقوم المتصفح باقتطاع المصفوفة.

المصفوفة كائن، فماذا يعني هذا؟

في الواقع، في JavaScript، المصفوفة عبارة عن كائن، مكتمل بإعدادات تلقائية للطول وطرق خاصة.

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

مفاتيح المصفوفة غير الرقمية

المفاتيح هي أرقام، ولكن يمكن أن يكون لها أي اسم:

arr = arr = 5 arr.prop = 10 // لا تفعل هذا

في جافا سكريبت، المصفوفات عبارة عن جداول تجزئة، والتي لها مزايا في الأداء ولكن أيضًا لها عيوب معينة.

على سبيل المثال، يعمل الضغط/البوب ​​فقط على العناصر الخارجية للمصفوفة، لذا فهي سريعة بشكل لا يصدق.

الدفع يعمل فقط مع النهاية:

var arr = ["My"، "array"] arr.push("something") تنبيه(arr) // سلسلة "array"

تعتبر أساليب النقل/إلغاء النقل بطيئة لأنها تحتاج إلى إعادة ترقيم المصفوفة بأكملها. يمكن أن تتسبب طريقة اللصق أيضًا في تغيير الترقيم:


لذا فإن Shift/unshift أبطأ من Push/Pop . كلما كان المصفوفة أكبر، كلما استغرق جافا سكريبت وقتًا أطول لفرز المصفوفة.

مهمة الإدارة الذاتية

ماذا ستكون النتيجة؟ لماذا؟

arr = ["a"، "b"] arr.push(function() ( تنبيه(هذا) )) arr() // ?

حل

بما أن المصفوفات هي كائنات، arr ..هو في الواقع استدعاء أسلوب على كائن مثل obj طريقة:

arr() // نفس arr() // هذا غير صحيح من الناحية النحوية، ولكنه نفسه من الناحية النظرية: arr.2() // أعيد كتابته بنفس أسلوب obj.method() this = arr في هذه الحالة يتم تمريره إلى وظيفة، لذلك تتم طباعة محتويات arr. arr = ["a"، "b"] arr.push(function() ( تنبيه(هذا) )) arr() // "a"، "b"، وظيفة

صفائف متفرقة، وصف الطول

تسمح لك خاصية الطول بالحصول على ليس حجم المصفوفة في جافا سكريبت، ولكن الفهرس الأخير + 1. وهذا مهم عندما نتحدث عن المصفوفات المتفرقة، مع وجود "فجوات" في المؤشرات.

في المثال التالي، سنضيف عنصرين إلى الثمار الفارغة، لكن قيمة الطول ستبقى 100:

var Fruits = // مجموعة فارغة Fruits = "Peach" Fruits = "Apple" تنبيه (fruits.length) // 100 (ولكن هناك عنصرين فقط في المصفوفة)

إذا حاولت إخراج مصفوفة متفرقة، فسيقوم المتصفح بإرجاع قيم الفهرس المفقودة كعناصر فارغة:

var Fruits = // مصفوفة فارغة Fruits = "Peach" Fruits = "Apple" تنبيه(fruits) // ,Peach,Apple (أو شيء من هذا القبيل)

لكن المصفوفة هي كائن ذو مفتاحين. القيم المفقودة لا تشغل مساحة.

تتصرف المصفوفات المتفرقة بشكل غريب عند تطبيق أساليب المصفوفة عليها. ليس لديهم أي فكرة عن أن الفهارس مفقودة:

var Fruits = Fruits = "Peach" Fruits = "Apple" تنبيه (fruits.pop()) // انبثاق "Apple" (للفهرس 9) تنبيه (fruits.pop()) // انبثاق عنصر غير محدد (للفهرس 8) )

حاول تجنب المصفوفات المتفرقة. وعلى أية حال، فإن أساليبهم لن تعمل بشكل طبيعي. استخدم الكائن بدلاً من ذلك.

الإزالة من مصفوفة

كما نعلم، المصفوفات هي كائنات، لذا يمكننا استخدام الحذف لإزالة قيمة:

var arr = ["Go"، "to"، "home"] حذف arr // الآن arr = ["Go"، غير محدد، "home"] تنبيه(arr) // غير محدد

يمكنك أن ترى أن القيمة قد تمت إزالتها، ولكن ليس بالطريقة التي نرغب فيها، لأن المصفوفة تحتوي على عنصر غير محدد.

يقوم عامل الحذف بإزالة زوج القيمة الرئيسية وهذا كل شيء. بطبيعة الحال، نظرًا لأن المصفوفة عبارة عن تجزئة فقط، يصبح موضع العنصر الذي تمت إزالته غير محدد.

نحتاج في أغلب الأحيان إلى إزالة عنصر دون ترك "ثقوب" بين الفهارس. هناك طريقة أخرى ستساعدنا في هذا.

طريقة لصق

يمكن لطريقة اللصق إزالة العناصر واستبدالها في JavaScript مصفوفات متعددة الأبعاد. بناء الجملة الخاص به هو:

arr.splice(index,deleteCount[,elem1,...,elemN])

يزيل عنصر الحذف بدءًا من الفهرس ثم يُدرج elem1، ...، elemN في مكانه.

دعونا نلقي نظرة على بعض الأمثلة:

var arr = ["Go"، "to"، "home"] arr.splice(1, 1) // إزالة عنصر واحد بدءًا من الفهرس 1 تنبيه(arr.join("،")// ["Go " ، "الصفحة الرئيسية"] (تمت إزالة عنصر واحد)

لذلك يمكنك استخدام لصق لإزالة عنصر واحد من صفيف. يتم إزاحة أرقام عناصر المصفوفة لملء المساحة:

var arr = ["Go"، "to"، "home"] arr.splice(0, 1) // إزالة عنصر واحد، بدءًا من الفهرس 0 تنبيه(arr) // أصبح "to" هو العنصر الأول

يوضح المثال التالي كيفية استبدال العناصر:

يُرجع التابع splice مصفوفة من العناصر المحذوفة:

var arr = ["Go"، "to"، "home"، "now"]; // إزالة العنصرين الأولين var Remove = arr.splice(0, 2) تنبيه(removed) // "Go"، "to"<-- массив удаленных элементов splice может вставлять элементы, задайте 0 для deleteCount. var arr = ["Go", "to", "home"]; // со второй позиции // удаляем 0 // и вставляем "my", "sweet" arr.splice(2, 0, "my", "sweet") alert(arr) // "Go", "to", "my", "sweet", "home"

يمكن لهذه الطريقة أيضًا استخدام فهرس سالب، والذي يتم حسابه من نهاية المصفوفة:

var arr = // للعنصر -1 (قبل الأخير) // إزالة 0 عنصر، // وإدراج 3 و4 arr.splice(-1, 0, 3, 4) تنبيه(arr) // 1,2,3, 4.5

مهمة الإدارة الذاتية

يحتوي الكائن على خاصية className، التي تحتوي على أسماء الفئات، مفصولة بمسافات:

فار obj = (اسم الفئة: "القائمة المفتوحة")

اكتب دالة RemoveClass(obj, cls) تزيل الفئة cls إذا تم إعطاؤها:

RemoveClass(obj, "open") // obj.className="menu" RemoveClass(obj, "blabla") // لا توجد تغييرات (لا يوجد فئة لإزالتها)

حل

تحتاج إلى تقسيم className إلى أجزاء والتكرار خلال هذه الأجزاء. إذا تم العثور على تطابق، تتم إزالته من مجموعة كائنات JavaScript ثم تتم إضافته مرة أخرى إلى النهاية.

دعونا نحسن هذا قليلاً:

وظيفة RemoveClass(elem, cls) ( for(var c = elem.className.split(" "), i=c.length-1; i>=0; i--) ( if (c[i] == cls ) c.splice(i,1)) ) elem.className = c.join(" ") ) var obj = ( className: "open القائمة" ) RemoveClass(obj, "open") RemoveClass(obj, "blabla") تنبيه (obj.className) // القائمة

في المثال أعلاه، تم تعيين المتغير c في بداية الحلقة وتم تعيين i على فهرسه الأخير.

الحلقة نفسها تعمل في الاتجاه المعاكس، وتنتهي بالشرط i>=0. يتم ذلك لأنه يتم تحديد i>=0 بشكل أسرع من i . مما يسرع عملية البحث عن العقارات في c .

طريقة شريحة

يمكنك استخراج جزء من مصفوفة باستخدام طريقة الشريحة (begin[, end]): var arr = ["لماذا"، "learn"، "JavaScript"]; var arr2 = arr.slice(0,2) // يأخذ عنصرين، بدءًا من 0 تنبيه(arr2.join("، ")) // "لماذا، تعلم"

يرجى ملاحظة أن هذه الطريقة لا تغير عدد العناصر في المصفوفة في JavaScript، ولكنها تنسخ جزءًا منها.

يمكنك حذف الوسيطة الثانية لتبدأ جميع العناصر من فهرس محدد:

var arr = ["لماذا"، "تعلم"، "JavaScript"]؛ var arr2 = arr.slice(1) // يأخذ جميع العناصر بدءًا من 1 تنبيه(arr2.join("، ")) // "تعلم، جافا سكريبت"

تدعم الطريقة الفهارس السالبة، تمامًا مثل String#slice .

طريقة عكسية

آخر طريقة مفيدة-يعكس. لنفترض أنني أريد الحصول على الجزء الأخير من النطاق مثل " com" من " my.site.com" وإليك كيفية القيام بذلك:

var domain = "my.site.com" var last = domain.split(".").reverse() تنبيه(الأخير)

لاحظ أن صفائف JavaScript تدعم بناء جملة معقد (reverse()) لاستدعاء طريقة ثم استرداد عنصر من المصفوفة الناتجة.

يمكنك إنشاء مكالمات أطول مثل عكس () 0] arr.sort() تنبيه(arr) // 1, 15, 2

قم بتشغيل الكود أعلاه. سوف تحصل على الطلب 1، 15، 2. وذلك لأن الطريقة تحول كل شيء إلى سلسلة وتستخدم ترتيبًا معجميًا افتراضيًا.

آخر تحديث: 26/03/2018

يمثل كائن Array مصفوفة ويوفر عددًا من الخصائص والأساليب التي يمكننا من خلالها التعامل مع المصفوفة.

تهيئة المصفوفة

يمكنك إنشاء مصفوفة فارغة باستخدام الأقواس المربعة أو مُنشئ المصفوفة:

مستخدمو var = new Array(); فار الناس = ; console.log(users); // مصفوفة console.log(people); // صفيف

يمكنك تهيئة مصفوفة على الفور بعدد معين من العناصر:

var users = new Array("Tom", "Bill", "Alice"); var People = ["Sam"، "John"، "Kate"]; console.log(users); // ["توم"، "بيل"، "أليس"] console.log(people); // ["سام"، "جون"، "كيت"]

يمكنك تعريف مصفوفة وإضافة عناصر جديدة إليها أثناء التقدم:

مستخدمو var = new Array(); المستخدمين = "توم"; المستخدمين = "كيت"; console.log(users); // "توم" console.log(users); // غير محدد

لا يهم أنه افتراضيًا يتم إنشاء المصفوفة بطول صفري. باستخدام الفهارس، يمكننا استبدال عنصر أو آخر في مصفوفة عند فهرس محدد.

طول

لمعرفة طول المصفوفة، استخدم خاصية الطول:

var Fruit = new Array(); الفاكهة = "التفاح"؛ الفاكهة = "الكمثرى"؛ الفاكهة = "الخوخ"؛ document.write("في عنصر فاكهة المصفوفة " + Fruit.length + ":
"); for(var i=0; i< fruit.length; i++) document.write(fruit[i] + "
");

في الواقع، سيكون طول المصفوفة هو فهرس العنصر الأخير زائد واحد. على سبيل المثال:

مستخدمو var = new Array(); // لا يوجد أي عنصر في المصفوفة users = "Tom"; المستخدمين = "كيت"; المستخدمين = "سام"; ل(فار ط = 0؛ ط

إخراج المتصفح:

توم كيت غير محدد غير محدد سام

على الرغم من أننا لم نضيف عناصر للمؤشرين 2 و 3، فإن طول المصفوفة في هذه الحالة سيكون الرقم 5. كل ما في الأمر هو أن العناصر ذات المؤشرات 2 و 3 ستكون لها قيمة غير محددة.

نسخ مصفوفة. شريحة()

يمكن أن يكون نسخ المصفوفة سطحيًا أو سطحيًا (نسخة ضحلة) وعميقًا (نسخة عميقة).

بالنسبة للنسخ الضحل، يكفي تعيين متغير بقيمة متغير آخر يخزن مصفوفة:

var users = ["Tom"، "Sam"، "Bill"]؛ console.log(users); // ["Tom"، "Sam"، "Bill"] varpeople = users; // نسخ الأشخاص الضحلة = "مايك"؛ // تغيير العنصر الثاني console.log(users); // ["توم"، "مايك"، "بيل"]

في هذه الحالة، سيشير متغير الأشخاص، بعد النسخ، إلى نفس المصفوفة التي يشير إليها متغير المستخدمين. لذلك، عند تغيير العناصر الموجودة في الأشخاص، ستتغير العناصر الموجودة في المستخدمين أيضًا، لأنها في الواقع نفس المصفوفة.

وهذا السلوك ليس مرغوبًا دائمًا. على سبيل المثال، نريد أن تشير المتغيرات إلى مصفوفات منفصلة بعد النسخ. وفي هذه الحالة، يمكنك استخدام النسخ العميق باستخدام طريقة الشريحة ():

var users = ["Tom"، "Sam"، "Bill"]؛ console.log(users); // ["Tom"، "Sam"، "Bill"] varpeople = users.slice(); // نسخة عميقة People = "Mike"; // تغيير العنصر الثاني console.log(users); // ["توم"، "سام"، "بيل"] console.log(people); // ["توم"، "مايك"، "بيل"]

في هذه الحالة، بعد النسخ، ستشير المتغيرات إلى مصفوفات مختلفة، ويمكننا تغييرها بشكل منفصل عن بعضها البعض.

تسمح لك طريقة الشريحة () أيضًا بنسخ جزء من المصفوفة:

var users = ["Tom"، "Sam"، "Bill"، "Alice"، "Kate"]؛ فار الناس = users.slice(1, 4); console.log(people); // ["سام"، "بيل"، "أليس"]

يتم تمرير طريقة الشريحة () فهارس البداية والنهاية، والتي تستخدم لاسترداد القيم من المصفوفة. أي أنه في هذه الحالة، ينتقل التحديد في المصفوفة الجديدة من الفهرس 1 إلى الفهرس 4، دون تضمينه. وبما أن فهرسة المصفوفة تبدأ من الصفر، فإن المصفوفة الجديدة ستحتوي على العنصر الثاني والثالث والرابع.

يدفع()

تضيف طريقة الدفع () عنصرًا إلى نهاية المصفوفة:

فاكهة فار = ; Fruit.push("التفاح"); Fruit.push("الكمثرى"); Fruit.push("الخوخ"); Fruit.push("الكرز"،"المشمش
"); document.write (الفاكهة)؛ // التفاح والكمثرى والخوخ والكرز والمشمش

البوب ​​()

تقوم طريقة pop() بإزالة العنصر الأخير من المصفوفة:

Var Fruit = ["تفاح"، "كمثرى"، "برقوق"]؛ فار lastFruit = Fruit.pop(); // استخرج العنصر الأخير من المصفوفة document.write(lastFruit + "
"); document.write("في عنصر فاكهة المصفوفة " + Fruit. length + ":
"); for(var i=0; i ");

إخراج المتصفح:

البرقوق تحتوي مجموعة الفاكهة على عنصرين: التفاح والكمثرى

يحول()

يقوم الأسلوب Shift() باسترداد وإزالة العنصر الأول من المصفوفة:

Var Fruit = ["تفاح"، "كمثرى"، "برقوق"]؛ var firstFruit = Fruit.shift(); document.write(firstFruit + "
"); document.write("في عنصر فاكهة المصفوفة " + Fruit. length + ":
"); for(var i=0; i ");

إخراج المتصفح:

التفاح تحتوي مجموعة الفاكهة على عنصرين: الكمثرى والخوخ

إلغاء النقل ()

يضيف التابع unshift()‎ عنصرًا جديدًا إلى بداية المصفوفة:

Var Fruit = ["تفاح"، "كمثرى"، "برقوق"]؛ Fruit.unshift("المشمش"); document.write(الفاكهة);

إخراج المتصفح:

المشمش، التفاح، الكمثرى، البرقوق

إزالة عنصر حسب الفهرس. لصق()

تقوم طريقة splice () بإزالة العناصر الموجودة في فهرس محدد. على سبيل المثال، إزالة العناصر من الفهرس الثالث:

var users = ["Tom"، "Sam"، "Bill"، "Alice"، "Kate"]؛ تم حذف فار = users.splice(3); console.log(deleted); // [ "أليس"، "كيت" ] console.log(users); // [ "توم"، "سام"، "بيل" ]

تقوم طريقة الشريحة بإرجاع العناصر التي تمت إزالتها.

في هذه الحالة، يتم الحذف من بداية المصفوفة. إذا قمت بتمرير فهرس سلبي، فسيتم إجراء الحذف من نهاية المصفوفة. على سبيل المثال، دعونا نزيل العنصر الأخير:

var users = ["Tom"، "Sam"، "Bill"، "Alice"، "Kate"]؛ فار محذوف = users.splice(-1); console.log(deleted); // [ "كيت"] console.log(users); // [ "توم"، "سام"، "بيل"، "أليس" ]

يسمح لك إصدار إضافي من الطريقة بتحديد فهرس النهاية للحذف. على سبيل المثال، لنحذف الفهرس الأول إلى الثالث:

var users = ["Tom"، "Sam"، "Bill"، "Alice"، "Kate"]؛ تم حذف فار = users.splice(1,3); console.log(deleted); // [ "Sam"، "Bill"، "Alice" ] console.log(users); // [ "توم"، "كيت" ]

يتيح لك إصدار آخر من التابع splice إدراج عناصر جديدة بدلاً من العناصر المحذوفة:

var users = ["Tom"، "Sam"، "Bill"، "Alice"، "Kate"]؛ فار محذوف = users.splice(1,3, "Ann", "Bob"); console.log(deleted); // [ "Sam"، "Bill"، "Alice" ] console.log(users); // [ "توم"، "آن"، "بوب"، "كيت" ]

في هذه الحالة، نقوم بحذف ثلاثة عناصر من الفهارس الأول إلى الثالث وإدراج عنصرين بدلاً من ذلك.

كونكات ()

يتم استخدام طريقة concat() لدمج المصفوفات:

Var Fruit = ["تفاح"، "كمثرى"، "برقوق"]؛ var الخضار = ["طماطم"، "خيار"، "بطاطس"]؛ منتجات var = Fruit.concat(vegetables); ل(فار ط=0; ط< products.length; i++) document.write(products[i] + "
");

في هذه الحالة، ليس من الضروري دمج المصفوفات من نفس النوع فقط. أنواع مختلفة ممكنة:

Var Fruit = ["تفاح"، "كمثرى"، "برقوق"]؛ أسعار فار = ; منتجات فار = Fruit.concat(prices);

ينضم()

يجمع الأسلوب join() كافة عناصر المصفوفة في سلسلة واحدة:

Var Fruit = ["تفاح"، "كمثرى"، "برقوق"، "مشمش"، "خوخ"]؛ var FruitString = Fruit.join("، "); document.write(fruitString);

يتم تمرير طريقة join () فاصلًا بين عناصر المصفوفة. في هذه الحالة، سيتم استخدام الفاصلة والمسافة ("،") كفاصل.

نوع()

تقوم طريقة الترتيب () بفرز المصفوفة بترتيب تصاعدي:

Var Fruit = ["تفاح"، "كمثرى"، "برقوق"، "مشمش"، "خوخ"]؛ Fruit.sort(); ل(فار ط = 0؛ ط< fruit.length; i++) document.write(fruit[i] + "
");

إخراج المتصفح:

المشمش الكمثرى الخوخ البرقوق التفاح

يعكس()

تعمل الطريقة العكسية () على عكس المصفوفة للخلف:

Var Fruit = ["تفاح"، "كمثرى"، "برقوق"، "مشمش"، "خوخ"]؛ Fruit.reverse(); ل(فار ط=0; ط< fruit.length; i++) document.write(fruit[i] + "
");

إخراج المتصفح:

الخوخ، المشمش، البرقوق، الكمثرى، التفاح

بالاشتراك مع طريقة الفرز () يمكنك فرز المصفوفة بترتيب تنازلي:

Var Fruit = ["تفاح"، "كمثرى"، "برقوق"، "مشمش"، "خوخ"]؛ Fruit.sort().reverse(); ل(فار ط = 0؛ ط< fruit.length; i++) document.write(fruit[i] + "
");

إخراج المتصفح:

التفاح، البرقوق، الخوخ، الكمثرى، المشمش

العثور على فهرس العنصر

تقوم طريقتا IndexOf() و lastIndexOf() بإرجاع فهرس التضمين الأول والأخير لعنصر في المصفوفة. على سبيل المثال:

Var Fruit = ["تفاح"، "كمثرى"، "برقوق"، "تفاح"، "كمثرى"]؛ var firstIndex = Fruit.indexOf("apples"); var lastIndex = Fruit.lastIndexOf("apples"); varotherIndex = Fruit.indexOf("cherries"); document.write(firstIndex); // 0 document.write(lastIndex); // 3 document.write(otherIndex); // -1

قيمة firstIndex هي 0 لأن التضمين الأول لسطر "التفاحات" في المصفوفة يكون عند الفهرس 0، والأخير عند الفهرس 3.

إذا لم يكن العنصر موجودًا في المصفوفة، ففي هذه الحالة تقوم طريقتا IndexOf() و lastIndexOf() بإرجاع القيمة -1.

كل()

تتحقق الطريقة every() مما إذا كانت جميع العناصر تطابق شرطًا معينًا:

أرقام المتغير = [ 1, -12, 8, -4, 25, 42 ]; حالة الوظيفة (القيمة، الفهرس، المصفوفة) ( var result = false; if (value > 0) ( result = true; ) return result; ); تم تمرير فار = أرقام.كل(حالة); document.write(passed); // خطأ شنيع

يتم تمرير الأسلوب every() دالة تمثل الشرط كمعلمة. تأخذ هذه الوظيفة ثلاث معلمات:

حالة الوظيفة (القيمة، الفهرس، الصفيف) ()

تمثل معلمة القيمة عنصر الصفيف الحالي الذي يتم تكراره، وتمثل معلمة الفهرس فهرس ذلك العنصر، وتقوم معلمة الصفيف بتمرير مرجع إلى الصفيف.

في هذه الوظيفة يمكننا التحقق من قيمة العنصر الذي تم تمريره للتأكد من توافقها مع بعض الشروط. على سبيل المثال، في هذا المثال، نتحقق من كل عنصر في المصفوفة لمعرفة ما إذا كان أكبر من الصفر. وإذا كانت أكبر، فإننا نعيد القيمة true، أي أن العنصر يحقق الشرط. إذا كان أقل، فسيتم إرجاع خطأ - العنصر لا يفي بالشرط.

ونتيجة لذلك، عندما يتم استدعاء الأسلوب Numbers.every(condition)، فإنه يتكرر عبر جميع عناصر مصفوفة الأرقام ويمررها واحدًا تلو الآخر إلى الدالة الشرطية. إذا أعادت هذه الدالة القيمة true لجميع العناصر، فإن التابع every() يُرجع القيمة true. إذا لم يتطابق عنصر واحد على الأقل مع الشرط، فستُرجع الطريقة every() false .

بعض()

تشبه الطريقة some() الطريقة every()، ولكنها تتحقق فقط مما إذا كان عنصر واحد على الأقل يطابق الشرط. وفي هذه الحالة، تُرجع الدالة some()‎ القيمة true . إذا لم تكن هناك عناصر مطابقة للشرط في المصفوفة، فسيتم إرجاع خطأ:

أرقام المتغير = [ 1, -12, 8, -4, 25, 42 ]; حالة الوظيفة (القيمة، الفهرس، المصفوفة) ( var result = false; if (value === 8) ( result = true; ) return result; ); تم تمرير فار = أرقام.بعض(الحالة); // حقيقي

فلتر()

يقبل التابع filter()‎، مثل some() و every() ، دالة شرطية. ولكن في الوقت نفسه تقوم بإرجاع مجموعة من تلك العناصر التي تستوفي هذا الشرط:

أرقام المتغير = [ 1, -12, 8, -4, 25, 42 ]; حالة الوظيفة (القيمة، الفهرس، المصفوفة) ( var result = false; if (value > 0) ( result = true; ) return result; ); var filteredNumbers = number.filter(condition); ل(فار ط = 0؛ ط< filteredNumbers.length; i++) document.write(filteredNumbers[i] + "
");

إخراج المتصفح:

1 8 25 42

forEach () والخريطة ()

تتكرر أساليب forEach() وmap() على العناصر وتنفذ عمليات معينة عليها. على سبيل المثال، لحساب مربعات الأرقام في مصفوفة، يمكنك استخدام الكود التالي:

أرقام المتغير = [1، 2، 3، 4، 5، 6]؛ ل(فار ط = 0؛ ط "); }

ولكن باستخدام طريقة forEach() يمكنك تبسيط هذا البناء:

أرقام المتغير = [1، 2، 3، 4، 5، 6]؛ دالة مربع(قيمة، فهرس، صفيف) ( var result = value * value; document.write("مربع الرقم " + value + " هو " + result + "
"); ); number.forEach(square);

تأخذ طريقة forEach () نفس الوظيفة كمعلمة، والتي، عند التكرار على العناصر، يتم تمرير العنصر الحالي الذي يتم تكراره ويتم تنفيذ العمليات عليه.

تشبه طريقة Map() طريقة forEach؛ كما أنها تأخذ أيضًا دالة تنفذ عمليات على عناصر المصفوفة كمعلمة، لكن طريقة Map() تُرجع مصفوفة جديدة مع نتائج العمليات على عناصر المصفوفة.

على سبيل المثال، لنستخدم التابع Map لحساب مربعات الأرقام في المصفوفة:

أرقام المتغير = [1، 2، 3، 4، 5، 6]؛ مربع الوظيفة (القيمة، الفهرس، الصفيف) ( نتيجة الإرجاع = القيمة * القيمة؛ )؛ var SquareArray = number.map(square); document.write(squareArray);

تستقبل الوظيفة التي تم تمريرها إلى طريقة الخريطة () العنصر الحالي الذي يتم تكراره، وتنفذ العمليات عليه وترجع بعض القيمة. ثم تنتقل هذه القيمة إلى SquareArray الناتج

21/06/2017 الساعة 12:17

لحساب حجم مصفوفة من الكائنات في JavaScript، استخدم خاصية الطول للمصفوفة.

var arr = ["الأول"، "الثاني"]؛ console.log(arr.length); // 2

يمكن أن تحتوي المصفوفات في جافا سكريبت على فهارس مفقودة. على سبيل المثال

فار آر = ; آر = "أولا"; آر = "الثانية";

تقوم الخاصية length بإرجاع الحد الأقصى لفهرس المصفوفة + 1. في المثال المعطى، الطول = 5.

حساب عدد العناصر في مصفوفة في جافا سكريبت

Array.prototype.count = function())( var result = 0; for(var i = 0; i< this.length; i++) if (this[i] != undefined) result++; return result; }

مثال الاستخدام

فار آر = ; آر = "أولا"; آر = "الثانية"; console.log(arr.count()); //2

يمكنك أيضًا تعيين قيمة لخاصية الطول. يتيح لك هذا تقليل طول المصفوفة الموجودة.

var arr = ["الأول"، "الثاني"، "الثالث"]؛ طول = 2; console.log(arr); // ["الأول"، "الثاني"]

حساب حجم المصفوفة بالبايت في جافا سكريبت

المصفوفات هي كائنات عادية، لذا فإن حساب حجم المصفوفة بالبايت لا يختلف عن حساب حجم أي كائن آخر. لسوء الحظ، لا توفر جافا سكريبت واجهة برمجة التطبيقات لحساب الحجم، لذا سيتعين عليك حسابها بنفسك. يتم ذلك على النحو التالي: نستعرض جميع خصائص الكائن؛ إذا كانت الخاصية من النوع البدائي، فإننا نضيف حجم مثيل من هذا النوع إلى النتيجة الإجمالية؛ وإذا كانت الخاصية تحتوي على كائن، فإننا نحسبها بشكل متكرر حجمها.

حجم الدالةOf(obj) ( var bytes = 0; if(obj !== null && obj !== غير محدد) ( Switch(typeof obj) ( case "number": bytes += 8;break; case "string": bytes += obj.length * 2; case "boolean": bytes += 4;

الطريقة ليست دقيقة ولها العديد من المشاكل - على سبيل المثال، هناك احتمال الدخول في حلقة لا نهاية لها.