في JavaScript، المصفوفة بنية شبيهة بالقائمة بطول غير ثابت، ويمكنها أن تحمل أي نوع من القيم الأولية أو الكائنات، حتى الأنواع المختلطة.
وهي تتضمن خاصية length، إضافة إلى الكثير من الطرق المفيدة لاجتياز المصفوفة وتعديلها.
لإنشاء مصفوفة، أضف العناصر بين الأقواس المربعة [].
وللقراءة من المصفوفة، ضع الفهرس بين الأقواس المربعة [] بعد المعرّف. تبدأ فهارس المصفوفة من الصفر.
على سبيل المثال:
const names = ['Jack', 'Laura', 'Paul', 'Megan'];
names[1];
// => Laura
يمكن أيضًا إنشاء المصفوفات باستخدام صيغة البانية، لكن يُنصح بصيغة المصفوفة الحرفية في معظم الحالات.
const names = new Array();
names.push('Jack', 'Laura', 'Paul', 'Megan');
names[1];
// => Laura
لا يمكن للمصفوفات استخدام strings كفهارس للعناصر، بل يجب استخدام الأعداد الصحيحة (number).
إن التعيين أو الوصول عبر قيم غير صحيحة باستخدام صيغة الأقواس (أو صيغة النقطة) لن يعيّن أو يسترجع عنصرًا من قائمة المصفوفة نفسها، بل سيعيّن أو يصل إلى متغير مرتبط بمجموعة خصائص الكائن الخاصة بتلك المصفوفة.
خصائص كائن المصفوفة وقائمة عناصر المصفوفة منفصلتان، ولا يمكن تطبيق عمليات الاجتياز والتعديل الخاصة بالمصفوفة على هذه الخصائص المسماة.
const names = ['Jack', 'Laura', 'Paul', 'Megan'];
names.length;
// => 4
// Properties can be set on arrays using bracket ['property'] or
// dot .property notation, and this will affect the length, as
// shown below.
names.magician = 'Elyse';
names.length;
// => 4
// The property shows up when logging the array, making it seem
// that the property is somehow incorporated in the array.
names;
// => ["Jack", "Laura", "Paul", "Megan", magician: "Elyse"]
// However, be aware. Properties added via non-numeric keys are
// NOT part of the array's internal list, and are not traversed
// or mutated when using one of the traversal or mutation
// operations.
names.forEach((name) => console.log(name));
// => Jack
// => Laura
// => Paul
// => Megan
المصفوفات في JavaScript هي objects عادية، ويمكن حذف العناصر باستخدام الكلمة المفتاحية delete.
لكن هذا لا يغيّر طول المصفوفة، بل يترك فراغًا من empty.
في لغات أخرى، يشبه هذا المصفوفة المتفرقة.
تُتخطى فراغات empty عند استخدام عمليات الاجتياز أو التعديل.
const names = ['Jack', 'Laura', 'Paul', 'Megan'];
delete names[1];
names;
// => ["Jack", empty, "Paul", "Megan"]
names.length;
// => 4
names.forEach((name) => console.log(name));
// => Jack
// => Paul
// => Megan
إذا كنت لا تريد أي فراغات، وإذا أردت أن تعكس length عدد العناصر التي ستُجتاز أو تُعدّل، فاستخدم splice بدلًا من ذلك.
تُغيّر طريقة splice() محتويات المصفوفة عبر إزالة العناصر الموجودة أو استبدالها و/أو إضافة عناصر جديدة في مكانها.1
على سبيل المثال:
const names = ['Jack', 'Laura', 'Paul', 'Megan'];
names.splice(1, 1);
names;
// => ["Jack", "Paul", "Megan"]
names.length;
// => 3
names.forEach((name) => console.log(name));
// => Jack
// => Paul
// => Megan
ترتبط خاصية length في المصفوفة بقائمة العناصر التي تحتفظ بها المصفوفة.
ويمكن تغييرها.
عند زيادة الطول، تُنشئ فراغات empty لا تُؤخذ في الحسبان عند اجتياز المصفوفة أو تعديلها.
وعند تقليل الطول، فإنه يحذف العناصر في نهاية المصفوفة.
const names = ['Jack', 'Laura', 'Paul', 'Megan'];
names.length = 6;
names;
// => ["Jack", "Laura", "Paul", "Megan", empty × 2]
names.length = 2;
// => ["Jack", "Laura"]
لأن المصفوفات هي objects، فإن typeof names يعطي "object".
وللتحقق مما إذا كان شيء ما مصفوفة، استخدم Array.isArray:
const names = ['Jack', 'Laura', 'Paul', 'Megan'];
typeof names;
// => "object"
Array.isArray(names);
// => true
const object = {};
Array.isArray(object);
// => false
قد تميل إلى استخدام names instanceof Array، وهذا قد ينجح، لكن ليس في كل الحالات.
اقرأ هذا المقال لمزيد من المعلومات.
يمكن استخدام بعض الطرق المتاحة على كل كائن مصفوفة لإضافة عناصر إلى المصفوفة أو حذفها منها. إليك بعضًا منها:
تضيف طريقة
push()عنصرًا واحدًا أو أكثر إلى نهاية المصفوفة، وتُرجع الطول الجديد للمصفوفة.2
const names = ['Jack', 'Laura', 'Paul', 'Megan'];
names.push('Jill'); // => 5
names;
// => ['Jack', 'Laura', 'Paul', 'Megan', 'Jill']
تحذف طريقة
pop()العنصر الأخير من المصفوفة وتُرجع ذلك العنصر. وتغيّر هذه الطريقة طول المصفوفة.3
const names = ['Jack', 'Laura', 'Paul', 'Megan'];
names.pop(); // => 'Megan'
names;
// => ['Jack', 'Laura', 'Paul']
تحذف طريقة
shift()العنصر الأول من المصفوفة وتُرجع العنصر المحذوف. وتغيّر هذه الطريقة طول المصفوفة.4
const names = ['Jack', 'Laura', 'Paul', 'Megan'];
names.shift(); // => 'Jack'
names;
// => ['Laura', 'Paul', 'Megan']
تضيف طريقة unshift() عنصرًا واحدًا أو أكثر إلى بداية المصفوفة وتُرجع الطول الجديد للمصفوفة.5
const names = ['Jack', 'Laura', 'Paul', 'Megan'];
names.unshift('Jill'); // => 5
names;
// => ['Jill', 'Jack', 'Laura', 'Paul', 'Megan']
تُغيّر طريقة splice() محتويات المصفوفة عبر إزالة العناصر الموجودة أو استبدالها و/أو إضافة عناصر جديدة في مكانها. وتُرجع هذه الطريقة مصفوفة تحتوي على العناصر المحذوفة.1
const names = ['Jack', 'Laura', 'Paul', 'Megan'];
names.splice(2, 1, 'Jill'); // => ['Paul']
names;
// => ['Jack', 'Laura', 'Jill', 'Megan']
splice, MDN. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice (مرجع بتاريخ 29 سبتمبر 2021) ↩
push, MDN. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push (مرجع بتاريخ 29 سبتمبر 2021) ↩
pop, MDN. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/pop (مرجع بتاريخ 29 سبتمبر 2021) ↩
shift, MDN. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/shift (مرجع بتاريخ 29 سبتمبر 2021) ↩
unshift, MDN. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/unshift (مرجع بتاريخ 29 سبتمبر 2021) ↩