قبل المقدمة ، رمي سؤالاً: كيف تجمع بين المصفوفات المتعددة في صفيف واحد؟
تنقسم جلسات المشاركة التالية إلى الأقسام الفرعية التالية:
1. مقدمة أساسية لطريقة Concat
2. اشعر بالطريقة المتسلقة من المثال
1. مقدمة أساسية لطريقة Concat
يتم استخدام طريقة التسلس لدمج صفائف متعددة. يضيف عضو المصفوفة الجديدة إلى نهاية الصفيف الأصلي ، ثم يعيد صفيفًا جديدًا ، يظل الصفيف الأصلي دون تغيير.
console.log ([]. concat ([1] ، [2] ، [3])) ؛ // [1 ، 2 ، 3] console.log ([]. concat ([[1] ، [2] ، [3]])) ؛ // [1] ، [2] ، [3]] console.log ([]. concat (4 ، [[5،6] ، [7]])) ؛ // [4 ، [5 ، 6] ، [7]]
في الكود أعلاه ، تتمثل قيمة الإرجاع الأولى في دمج صفيف فارغ بثلاث صفائف [1] ، [2] ، [3] في صفيف ، وبالتالي العودة [1 ، 2 ، 3]. والثاني هو الجمع بين صفيف فارغ مع رقم ثنائي الأبعاد. أعضاء الصفيف ثنائي الأبعاد هم [1] ، [2] ، [3] ، لذلك [[1] ، [2] ، [3]]. لاحظ أن الصفيف ثنائي الأبعاد قد تم إرجاعه. المثال الثالث هو نفسه. فهم المفاهيم مهم للغاية هنا ، أي إضافة أعضاء من الصفيف الجديد إلى ذيل الصفيف الأصلي.
بالإضافة إلى قبول المصفوفات كمعلمات ، يمكن أن تقبل Concat أيضًا أنواعًا أخرى من القيم كمعلمات. سيتم استخدامها كعناصر جديدة ، إضافة نهاية الصفيف.
console.log ([]. concat (1،2،3)) ؛ // [1،2،3] ؛ // مكافئة لـ console.log ([]. concat (1 ، [2،3])) ؛ // [1،2،3] ؛ console.log ([]. concat ([1] ، [2،3])) ؛ // [1،2،3] ؛
على الرغم من وجود محتوى أقل هنا ، إلا أنه يبدو بسيطًا للغاية. لكن ليس من السهل الفهم حقًا.
2. اشعر بالطريقة المتسلقة من المثال
بعد الحديث عن المعرفة الأساسية ، اسمحوا لي أن أريكم سؤالًا واجهته مؤخرًا. العنوان الأصلي مثل هذا.
يمكنك أن ترى ما يعنيه من خلال النظر إلى الأمثلة.
أحد حلول هذا السؤال هو:
var flatten = function (arr) {return [] .concat.apply ([] ، arr) ؛} ؛يمكن لهذه الوظيفة البسيطة أن تدرك وظيفة دمج العناصر في صفيف. ولكن عندما أفهم قيمة الإرجاع هذه ، تنشأ مشكلة.
سؤال: لماذا يوجد فرق بين استخدام طريقة التطبيق وعدم استخدام طريقة التطبيق؟
console.log ([]. concat.apply ([] ، [[1] ، [2] ، [3]])) ؛ // [1 ، 2 ، 3] console.log ([]. concat ([[1] ، [2] ، [3]])) ؛ // [[1] ، [2] ، [3]]
في الكود أعلاه ، تتم إضافة صفيف جديد أيضًا إلى الذيل في صفيف فارغ ، ويعود الأول [1،2،3]. والثاني هو صفيف ثنائي الأبعاد.
بعد فترة من القذف والمطاردة ، فهمت أخيرًا الأسباب المختلفة.
أولاً ، عندما ندعو طريقة مثيل COSS في صفيف فارغ ، نقوم بتمرير المعلمات في CONCAT ودفع إلى نهاية الصفيف. أي أن الصفيف الفارغ يتم دمجه مع الصفيف الخارجي من الصفيف الذي تم تمريره ، ثم يتم إرجاع مجموعة جديدة.
console.log ([]. concat (1،2،3)) ؛ // [1 ، 2 ، 3] console.log ([]. concat ([1] ، [2] ، [3])) ؛ // [1 ، 2 ، 3] console.log ([]. concat ([[1] ، [2] ، [3]])) ؛ // [1] ، [2] ، [3]] console.log ([]. concat ([[1] ، [2] ، [3]])) ؛ // [[1] ، [2] ، [3]]]
في الكود أعلاه ، يتغير تدريجياً من عدة صفائف إلى صفائف أحادية البعد ، صفائف ثنائية الأبعاد ، والصفائف ثلاثية الأبعاد.
في التفسير التفصيلي والمقال الملخص لأساليب الاتصال والتطبيق والربط في JavaScript ، يذكر أن وظيفة طريقة التطبيق تشبه طريقة الاتصال ، كما أنها تغير هذه النقطة (النطاق الذي يتم فيه تنفيذ الوظيفة) ، ثم تستدعي الوظيفة في النطاق المحدد. سيتم تنفيذ الوظيفة على الفور. الفرق الوحيد هو أنه يتلقى صفيفًا كوسيطة عند تنفيذ الوظيفة.
المعلمة الأولى من طريقة التطبيق هي أيضًا الكائن الذي يريد هذا الإشارة إليه. إذا تم ضبطه على NULL أو غير محدد أو هذا ، فهذا يعادل تحديد كائن عالمي. المعلمة الثانية هي صفيف ، ويتم استخدام جميع أعضاء الصفيف كمعلمات بدورها ، ويتم تمرير الوظيفة الأصلية عند استدعاء. يجب إضافة معلمات الوظيفة الأصلية واحدة تلو الأخرى في طريقة الاتصال ، ولكن في طريقة التطبيق ، يجب إضافتها كصفيف.
console.log ([]. concat.apply ([] ، [[1] ، [2] ، [3]])) ؛ // [1 ، 2 ، 3] console.log ([]. concat ([[1] ، [2] ، [3]])) ؛ // [[1] ، [2] ، [3]]
كما يتضح من الكود ، فإن الجزء الأول من التعليمات البرمجية يستدعي طريقة Concat أولاً على الصفيف الفارغ. تتمثل وظيفة هذه الطريقة في إضافة أعضاء من الصفيف الجديد إلى نهاية المصفوفة الأصلية. يتم استدعاء طريقة التطبيق مرة أخرى ، ويتم تمرير المعلمة الأولى ، وتحديد نطاق الكائن الذي يتم تنفيذه. تتمثل وظيفة المعلمة الثانية في تمرير جميع أعضاء الصفيف كمعلمات في وقت واحد وتمريرها إلى الصفيف عند استدعاء.
لذلك ، عند استخدام الأساليب المسلحة والتطبيق في نفس الوقت ، سيتم تثبيت وظائف الطريقتين ، وهي ظاهرة مختلفة عن استخدام Concat وحدها. دعونا نرى مثالا.
console.log ([]. concat ([1،2،3])) ؛ // [1 ، 2 ، 3] console.log ([]. concat.apply ([] ، [[1] ، [2] ، [3]])) ؛ // [1 ، 2 ، 3] console.log ([]. concat ([[1] ، [2] ، [3]])) ؛ // [1] ، [2 ، [3]] console.log ([]. concat ([[1] ، [2] ، [3]])) ؛ // [[1] ، [2] ، [3]] console.log ([]. concat ([[1] ، [2] ، [3]])) ؛ // [[1] ، [2] ، [3]] console.log ([]. concat ([[1] ، [2] ، [3]])) ؛ // [[1] ، [2] ، [3]]] console.log ([]. concat.apply ([] ، [[[[1] ، [2] ، [3]])) ؛ // [[[1] ، [2] ، [3]]]]]) ؛ // [[1] ، [2] ، [3]]]]
في الكود أعلاه ، تجمع الطريقة المسلحة بين معظم الأرقام ، ثم دمج صفيف الطبقة التالية على أساس الدمج.
console.log ([] // [1،2،3]
تلخيص:
1. عند استخدام طريقة Concat وحدها ، سيتم إضافة أعضاء الصفيف الجديد إلى نهاية المصفوفة الأصلية.
2. عند استخدام طريقة تطبيق لتحديد مؤشر طريقة التسلس هذه ، سيتم تثبيت وظائف الطريقتين.
3. طرق دمج عناصر الصفيف:
var flatten = function (arr) {return [] .concat.apply ([] ، arr) ؛} ؛ var flatten = function (Array) {return array.reduce (function (a ، b) {return A.Concat (b) ؛} ، [])}ما ورد أعلاه هو طريقة دمج المصفوفات باستخدام طريقة Concat التي قدمها لك المحرر. آمل أن يكون ذلك مفيدًا لك. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر إليك في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!