الكلمات السابقة
هناك 22 طريقة في الصفيف. تقسمها هذه المقالة إلى طرق وراثة الكائن ، وطرق تحويل المصفوفة ، وطرق المكدس والقائمة الانتخابية ، وطرق فرز الصفيف ، وطرق الربط الصفيف ، وطرق إنشاء المساعد الفرعي ، وطرق حذف المصفوفة ، وطرق موضع الصفيف ، وطرق دمج الصفيف ، وطرق تكرار الصفيف بالتفصيل.
طريقة الميراث الكائن
Array هو كائن خاص يرث طرق ToString () و tolocalestring () و valueof () للكائن.
【tostring ()】
تقوم طريقة ToString () بإرجاع سلسلة مفصولة بفاصلة تم تقسيمها من نموذج السلسلة لكل قيمة في الصفيف.
[ملاحظة] قيمة الإرجاع لهذه الطريقة هي نفس السلسلة التي تم إرجاعها عن طريق استدعاء طريقة Join () دون أي معلمات.
[1،2،3] .ToString () ؛ // '1،2،3' ['a' ، 'b' ، 'c'].
نظرًا لأن ALERT () يريد استلام معلمات السلسلة ، فإنه سيطلق على طريقة TOSTRING () في الخلفية ، وسيحصل على نفس النتيجة مثل طريقة TOSTRING ()
تنبيه ([1،2،3]) ؛ // '1،2،3'
【tolocalestring ()】
Tolocalestring () هي نسخة محلية من طريقة ToString () ، والتي غالباً ما تُرجع نفس قيمة طريقة ToString () ، لكنها ليست دائمًا هي الحالة. لأنه يدعو العنصر ، فإن طريقة tolocalestring () تحول كل عنصر صفيف إلى سلسلة
var person1 = {tolocalestring: function () {return 'nikolaos' ؛} ، toString: function () {return 'nikolas' ؛ [person1 ، person2] ؛ console.log (people.toString ()) ؛ // 'nikolas ، greg'console.log (people.tolocalestring ()) ؛ //' nikolas ، grigorios 'إذا كانت قيمة عنصر ما في الصفيف لاغية أو غير محددة ، يتم تمثيل القيمة كسلسلة فارغة في النتائج التي تم إرجاعها بواسطة أساليب tolocalestring () و tostring ().
var colors = [1 ، غير محدد ، 2 ، null ، 3] ؛ console.log (color.toString ()) ؛ // '1 ، ، 2 ، ، 3'console.log (colors.tolocalestring ()) ؛ //' 1 ، ، ، ، ، 3 ، 3 '
【valueof ()】
تقوم طريقة ValueOF () بإرجاع كائن الصفيف نفسه
var a = [1 ، 2 ، 3] ؛ console.log (a.valueof ()) ؛ // [1 ، 2 ، 3] console.log (a.valueof () extryof array) ؛ // true
طريقة تحويل المصفوفة
【ينضم()】
طريقة Array.join () هي عملية عكسية لطريقة string.split () ، والتي تقسم السلسلة إلى عدة كتل لإنشاء صفيف.
ستعيد أساليب tolocalestring () و tostring () الموروثة بواسطة المصفوفات عناصر الصفيف في أحرف مفصولة بفاصلة افتراضيًا ؛ يمكن أن تستخدم طريقة Join () المحددات المختلفة لبناء هذه السلسلة. تستقبل طريقة Join () معلمة واحدة فقط ، والتي يتم استخدامها كمحدد ، ثم تقوم بإرجاع سلسلة تحتوي على جميع عناصر الصفيف.
إذا لم يتم تمرير أي قيمة إلى طريقة Join () ، فاستخدم فاصلة كفاصل
var a = [1،2،3] ؛ console.log (a.join ()) ؛ // '1،2،3'console.log (A.Join (' ')) ؛ //' 1 2 3'console.log (A.Join ('')) ؛ // '123'var b = new Array (10) ؛ B.Join ('-') ؛ // '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------إذا كانت معلمة طريقة Join () غير محددة ، فإن المتصفح القياسي يعيد السلسلة باستخدام فاصلة كفاصل ، ويعيد متصفح IE7 السلسلة بـ "غير محددة" كفاصل.
// المتصفح القياسي هو "1،2،3" ؛ IE7-المستعرض هو '1undefined2undefined3'var a = [1،2،3] ؛ console.log (A.Join (غير محدد)) ؛
إذا كانت قيمة عنصر في الصفيف لاغية أو غير محددة ، يتم تمثيل القيمة كسلسلة فارغة في النتيجة التي تم إرجاعها بواسطة طريقة Join ()
var colors = [1 ، undefined ، 2 ، null ، 3] ؛ console.log (colors.join ()) ؛ // '1 ، ، 2 ، ، 3'
يمكن أيضًا استخدام هذه الطريقة على كائنات صفيف الفئة
console.log (array.prototype.join.call ('hello' ، '-')) ؛ // "hello" var obj = {0: 'a' ، 1: 'b' ، length: 2} ؛ console.log (array.prototype.join.call (obj ، '-') ؛ // 'ab'[ملاحظة] إذا لم يكن للكائن سمة طول ، فهو ليس صفيف فئة ، ولا يمكن استدعاء طريقة الصفيف
var obj = {0: 'a' ، 1: 'b'} ؛ console.log (typeof array.prototype.join.call (obj ، '-')) ؛ // ''أساليب المكدس وقائمة الانتظار
تسمح أساليب PUSH () و pop () باستخدام المصفوفات كدايات. يتشابه سلوك أساليب UNSHIFT () و SHIFT () إلى حد كبير مع PUSH () و POP (). الفرق هو أن السابق يدرج ويحذف عناصر على رأس الصفيف وليس في الذيل.
المكدس عبارة عن بنية بيانات LIFO (الأخيرة ، في وقت لاحق من الخارج) ، أي أحدث عنصر مضاف في أقرب وقت. يحدث الإدراج (المسمى Pushing) والإزالة (يسمى المنبثقة) من العناصر الموجودة في المكدس فقط في مكان واحد - الجزء العلوي من المكدس. يوفر JavaScript طرق Push () و pop () خصيصًا للمصفوفات لتحقيق سلوك يشبه المكدس
قاعدة الوصول إلى بنية بيانات قائمة الانتظار هي FIFO (الأول في الأول ، الأول ، الأول ، الأول). يضيف قائمة الانتظار عناصر في نهاية القائمة وتزيل العناصر من الطرف الأمامي من القائمة. باستخدام طرق shift () و push () مجتمعة ، يمكنك استخدام المصفوفات مثل قوائم الانتظار
【يدفع()】
يمكن أن تتلقى طريقة Push () أي عدد من المعلمات ، وإضافتها واحدة تلو الأخرى إلى نهاية الصفيف ، وإرجاع طول الصفيف المعدل. لذلك ، سوف يغير المصفوفة الصفيف الأصلي
var a = [] ؛ console.log (a ، a.push (1)) ؛ // [1] 1console.log (a ، a.push ('a')) ؛ // [1 ، 'a'] 2console.log (a ، a.push (true ، {})) ؛ // [1 ، 'a' ، {}] 4Console.log (A ، A.Push ([5،6])) ؛ // [1 ، 'a' ، true ، {} ، [5،6]] 5إذا كنت بحاجة إلى دمج صفيفتين ، فيمكنك استخدام طريقة التطبيق
var a = [1 ، 2 ، 3] ؛ var b = [4 ، 5 ، 6]
[ملاحظة] إذا كنت تستخدم طريقة الاتصال ، فسيتم اعتبار الصفيف B معلمة ككل
var a = [1 ، 2 ، 3] ؛ var b = [4 ، 5 ، 6] ؛ console.log (a ، array.prototype.push.call (a ، b)) ؛ // [1،2،3 ، [4،5،6]] 4
يمكن أن تضيف طريقة Push () أيضًا عناصر إلى الكائن ، ويصبح الكائن المضافة كائن صفيف ، أي فهرس الصفيف المقابل لمفتاح العنصر المضافة حديثًا ، ويحتوي الكائن على سمة طول
var obj = {a: 1} ؛ console.log (obj ، []. push.call (obj ، 2)) ؛ // {a: 1 ، 0: 2 ، length: 1} console.log (obj ، [].【pop ()】
تقوم طريقة POP () بإزالة العنصر الأخير من نهاية الصفيف ، ويقلل من قيمة طول الصفيف ، وإرجاع العنصر الذي تمت إزالته. لذلك ، سوف يغير المصفوفة الصفيف الأصلي
var a = ['a' ، 'b' ، 'c'] ؛ console.log (a ، a.pop ()) ؛ // ['a' ، 'b'] 'c'
لن يؤدي استخدام طريقة pop () للصفائف الفارغة إلى الإبلاغ عن خطأ ، ولكنه سيعود غير محدد
var a = [] ؛ console.log (a ، a.pop ()) ؛ // [] غير محدد
【يحول()】
تقوم طريقة SHIFT () بإزالة العنصر الأول في الصفيف وإرجاع العنصر ، بينما يتم تقليل طول الصفيف بمقدار 1. لذلك ، سيغير الصفيف الصفيف الأصلي
var a = ['a' ، 'b' ، 'c'] ؛ console.log (a ، a.shift ()) ؛ // ['b' ، 'c'] 'a'
استخدم طريقة Shift () للصفائف الفارغة ، ولن يتم الإبلاغ عن أي خطأ ، ولكن سيعود غير محدد
var a = [] ؛ console.log (a ، a.shift ()) ؛ // [] غير محدد
【Unsonshift ()】
تضيف طريقة UNSHIFT () أي عنصر في الطرف الأمامي من الصفيف ويعيد طول الصفيف الجديد. لذلك ، سوف يغير المصفوفة الصفيف الأصلي
var a = ['a' ، 'b' ، 'c'] ؛ console.log (a ، a.unshift ('x')) ؛ // ['x' ، 'a' ، 'b' ، 'c'] 4عندما يتم استدعاء UNSHIFT () مع معلمات متعددة ، يتم إدخال المعلمات في وقت واحد بدلاً من واحد في وقت واحد. هذا يعني أن ترتيب العناصر المدرجة في الصفيف النهائي يتوافق مع طلبها في قائمة المعلمات
var a = ['a' ، 'b' ، 'c'] ؛ console.log (a ، a.unshift ('x' ، 'y' ، 'z')) ؛ // ['x' ، 'y' ، 'z' ، 'a' ، 'b' ، 'c'] 6[ملاحظة] في IE7-Browser ، تعيد طريقة UNSHIFT () غير محددة دائمًا
// في المتصفح القياسي ، إرجاع [1] 1 ؛ وفي IE7-Browser ، return [1] undefinedvar a = [] ؛ console.log (a ، a.unshift (1)) ؛
طريقة فرز الصفيف
هناك طريقتان في الصفيف يمكن استخدامه لإعادة الترتيب مباشرة: عكس () و sort ()
【يعكس()】
يتم استخدام طريقة عكسية () لعكس ترتيب الصفيف وإرجاع الصفيف المرتبة ؛ وتغير ترتيب الصفيف الأصلي أيضًا.
var array = [1،2،4،3،5] ؛ console.log (Array ، array.reverse ()) ؛ // [5،3،4،2،1] [5،3،4،2،1] var array = ['str' ، true ، 3]
【نوع()】
بشكل افتراضي ، تقوم طريقة SORT () بترتيب عناصر الصفيف في ترتيب تصاعدي للسلاسل. ستستدعي طريقة الفرز طريقة TOSTRING () لكل عنصر صفيف ، ثم قارن بين فرز السلسلة الناتج لإرجاع المصفوفة المرتبة ، ويتغير ترتيب الصفيف الأصلي أيضًا.
var array = [1،2،4،3،5] ؛ console.log (array ، array.sort ()) ؛ // [1،2،3،4،5] [1،2،3،4،5] var array = ['3str' ، 3،2 ، '2'] ؛ [1،5،10،50] ؛ console.log (Array ، Array.sort ()) ؛ // [1 ، 10 ، 5 ، 50]
إذا كانت الصفيف تحتوي على عناصر غير محددة ، فسيتم وضعها في نهاية الصفيف
var array = ['3' ، 3 ، undefined ، 2 ، '2'] ؛ console.log (array ، array.sort ()) ؛ // ["2" ، 2 ، "3" ، 3 ، undiped] ["2" ، 2 ، "3" ، 3 ، undefined]
يمكن أن تقبل طريقة SORT () وظيفة المقارنة كوسيطة لتحديد القيمة التي سبقتها القيمة. تتلقى وظيفة المقارنة معلمتين ، إرجاع رقم سالب إذا كان يجب أن تكون المعلمة الأولى قبل المعلمة الثانية ، وإرجاع 0 إذا كانت المعلمتين متساوية ، ويعيد رقمًا إيجابيًا إذا كان يجب أن تكون المعلمة الأولى بعد المعلمة الثانية
الوظيفة مقارنة (value1 ، value2) {if (value1 <value2) {return -1 ؛} آخر إذا (value1> value2) {return 1 ؛} آخر {return 0 ؛}} var array = ['5px' ، 50،1،10] ؛ seconsole.log (Array.sort (مقارنة)) ؛ // ["5px" ، 1 ، 10 ، 50]بالنسبة للأنواع العددية أو طريقة ValueOF () ، يمكن أن تبسط وظيفة المقارنة نوع الكائن للنوع العددي.
الوظيفة مقارنة (value1 ، value2) {return value1 - value2 ؛} var array = ['5px' ، 50،1،10] ؛ console.log (array.sort (مقارنة)) ؛ // ["5px" ، 1،10،50] var array = [5،50،1،10]إذا تم تنفيذ مجموعة من الأوتار غير حساسة للفرز الأبجدي ، فإن وظيفة المقارنة تقوم أولاً بتحويل المعلمات إلى سلاسل صغيرة ثم تبدأ المقارنة
a = ['ant' ، 'bug' ، 'cat' ، 'dog'] ؛ A.Sort () ؛ // ['bug' ، 'dog' ، 'ant' ، 'cat'] ؛ A.Sort (function (s ، t) {var a = s.tolowercase () ؛ var b = t.tolowercase () ؛ if (a <b) return -1 ؛ if (a> b) ؛ 0 ؛}) ؛ // ['ant' ، 'bug' ، 'cat' ، 'dog']【TIPS】 إنشاء صفيف عشوائي باستخدام طريقة SORT ()
الوظيفة مقارنة () {return math.random () - 0.5 ؛} var array = [1،2،3،4،5] ؛ console.log (array.sort (مقارنة)) ؛ // [2،1،5،4،3]طريقة خياطة الصفيف
【concat ()】
تنشئ طريقة Concat () صفيفًا جديدًا يعتمد على جميع العناصر في الصفيف الحالي. قم أولاً بإنشاء نسخة من الصفيف الحالي ، ثم أضف المعلمات المستلمة إلى نهاية النسخة ، وأخيراً إرجاع الصفيف الذي تم بناؤه حديثًا. لذلك ، لا يؤثر Concat () على الصفيف الأصلي
إذا لم يتم تمرير المعلمة إلى طريقة Concat () ، فإنها ببساطة نسخ الصفيف الحالي ؛ إذا كانت المعلمة واحدة أو أكثر من المصفوفات ، فإن الطريقة تضيف كل عنصر في هذه المصفوفات إلى صفيف النتائج ؛ إذا لم تكن القيمة التي تم تمريرها صفيفًا ، فسيتم إضافة هذه القيم ببساطة إلى نهاية صفيف النتيجة
var numbers = [1،2] ؛ console.log (الأرقام ، الأرقام. concat (3،4)) ؛ // [1،2] [1،2،3،4] console.log (الأرقام ، الأرقام. [1،2،5،4،3،3،4،5،1،2] console.log (الأرقام ، الأرقام. concat (4 ، [5 ، [6،7]])) ؛ // [1،2] [1،2،4،5 ، [6،7]]]
إذا لم يتم توفير معلمات ، فإن طريقة CORCAT () تُرجع نسخة ضحلة من الصفيف الحالي. تعني ما يسمى "نسخة ضحلة" أنه إذا كان عضو الصفيف يتضمن قيمة نوع مركب (مثل كائن) ، فإن المصفوفة الجديدة تقوم بنسخ مرجع إلى القيمة.
// هذه الطريقة في الواقع تقوم فقط بنسخ البعد الأول من الصفيف. يخزن البعد الأول من الصفيف مرجع البعد الثاني ، ويقوم البعد الثاني بتخزين أرقام المحتوى الخاصة بهم بالفعل = [1،2] [[1،2]] ؛ var newNumbers = number.concat () ؛ console.log (الأرقام ، newNumbers) ؛ // [[1،2]]
يمكن أيضًا استخدام طريقة Concat () لدمج الكائنات في صفائف ، ولكن يجب القيام بها باستخدام طريقة Call ().
var newarray = array.prototype.concat.call ({a: 1} ، {b: 2}) console.log (newarray) ؛ // [{a: 1} ، {b: 2}] console.log (newarray [0] .a) ؛ // 1إنشاء طريقة الفرع
【شريحة()】
تقوم طريقة الشريحة () بإنشاء صفيف جديد يعتمد على عنصر واحد أو أكثر في الصفيف الحالي ، يقبل معلمًا أو معلمتين ، أي إرجاع المواضع البدء والنهاية للعنصر ، وإعادة الصفيف الجديد أخيرًا ، لذلك لا يؤثر Slice () على الصفيف الأصلي
تتطلب طريقة الشريحة (البدء ، النهاية) معلمتين البدء والنهاية ، مما يرجع إلى جهاز فرعي في هذا الصفيف من موضع البداية إلى (ولكن لا يحتوي) على وضع النهاية ؛ إذا كانت النهاية غير محددة أو غير موجودة ، فإنها تُرجع جميع العناصر من موضع البداية إلى نهاية الصفيف
إذا كان البدء رقمًا سالبًا ، ابدأ = الحد الأقصى (الطول + البدء ، 0)
إذا كانت النهاية عبارة عن رقم سالب ، end = max (length + end ، 0)
لا يمكن للبدء والنهاية تبادل المواقف
إذا لم تكن هناك معلمات ، فأعود إلى الصفيف الأصلي
أرقام var = [1،2،3،4،5] ؛ console.log (number.slice (2)) ؛ // [3،4،5] console.log (number.slice (2 ، undefined)) ؛ // [3،4،5] consol e.log (number.slice (2،3)) ؛ // [3] console.log (number.slice (2،1)) ؛ // [] console.log (number.slice (-3)) ؛ //-3+5 = 2 -> [3،4،5] console.log (number.slice (-8)) ؛ // max (5 + -8،0) = 0 -> [1،2،3،4،5] console.log (number.slice (0 ، -3)) ؛ // -3 + 5 = 2 -> [1،2] console.log (number.slice (-2 ، -1)) ؛ //-2+5 = 3 ؛ -1+5 = 4 ؛ -> [4]
في حالة عدم توفير معلمات ، تقوم طريقة الشريحة () بإرجاع نسخة ضحلة من المصفوفة الحالية
// هذه الطريقة في الواقع تقوم فقط بنسخ البعد الأول من الصفيف. يخزن البعد الأول من الصفيف مرجع البعد الثاني ، ويقوم البعد الثاني بتخزين أرقام محتواها بالفعل = [1،2] ؛ var newNumbers = number.slice () ؛ console.log (الأرقام ، newnumbers) ؛ // [1،2] [1،2] [[1،2]] ؛ var newnumbers = number.slice () ؛ console.log (الأرقام ، newNumbers) ؛ // [[1،2]]
تتضمن طريقة الشريحة () تحويل النوع الضمني للرقم () وظيفة التحويل. عندما يتم تحويل البداية إلى NAN ، فإنه يعادل البدء = 0 ؛ عندما يتم تحويل النهاية إلى NAN (باستثناء النهاية غير محددة) ، يتم إخراج صفيف فارغ
أرقام var = [1،2،3،4،5] ؛ console.log (number.slice (nan)) ؛ // [1،2،3،4،5] console.log (number.slice (0 ، nan)) ؛ // [] console.log (number.slice (true ، [3])) ؛ // [2،3] con sole.log (number.slice (null ، undefined))) ؛ // [1،2،3،4،5] console.log (number.slice ({})) ؛يمكنك استخدام طريقة الشريحة () لتحويل كائن صفيف الفئة إلى صفيف حقيقي
var arr = array.prototype.slice.call (Arraylike) ؛ array.prototype.slice.call ({0: 'a' ، 1: 'b' ، length: 2}) // ['a' ، 'b'] array.prototype.slice.call (document.querectall ("div")) ؛طريقة حذف الصفيف
【لصق()】
لصق () وشريحة () أسماء متشابهة للغاية ، لكن وظائفها مختلفة بشكل أساسي. يتم استخدام طريقة splice () لحذف جزء من الصفيف الأصلي ويمكن أن تضيف أعضاء صفيف جديد في الموقع المحذوف. ستغير هذه الطريقة الصفيف الأصلي.
يقوم Slits () بإرجاع صفيف مكون من عناصر محذوفة ، أو صفيف فارغ في حالة عدم إرجاع عناصر محذوفة.
تحدد المعلمة الأولى من splice () موضع البداية للإدراج أو الحذف. إذا كان البدء رقمًا سالبًا ، ابدأ = الحد الأقصى (الطول + البدء ، 0) ؛ إذا كانت البداية نان ، فمن المعادل البدء = 0
إذا تم توفير عنصر واحد فقط ، فإنه يعادل تقسيم الصفيف الأصلي إلى صفيفتين في الموقع المحدد
var a = [1،2،3،4،5،6،7،8] ؛ console.log (a ، a.splice ()) ؛ // [1،2،3،4،5،6،7] = [1،2،3،4،5،6،7،8] ؛ console.log (a ، a.splice (-4)) ؛ //-4+8 = 4 ؛ [1،2،3،4] [5،6،7،8] var a = [1،2،3،4،5،6،7،8] ؛ console.log (a ، a.splice (-9)) ؛ // max (-9+8،0) = 0 [] [1،2،3،4،5،6،7،8] ؛ console.log (A ، A.Splice (NAN)) ؛ // [] [1،2،3،4،5،6،7،8]
يحدد رقم المعلمة الثانية عدد العناصر التي يجب حذفها من الصفيف. إذا تم حذف المعلمة الثانية ، فسيتم حذف جميع العناصر من نقطة البداية إلى نهاية الصفيف. إذا كان الرقم سلبيًا أو نانًا أو غير محدد ، الرقم = 0 ، لذلك لم يتم حذف العنصر
var a = [1،2،3،4،5،6،7،8] ؛ console.log (a ، a.splice (0،2)) ؛ [1،2،3،4،5،6،7،8] [] var a = [1،2،3،4،5،6،7،8] ؛ console.log (a ، a.splice (1،100)) ؛ // [1] [2،3،4،5،6،7،8] var a = [1،2،3،4،5،6،7،8] ؛ console.log (A ، A.Splice (1 ، -5)) ؛ // [1،2،3،4،5،6،8] [] var a = [1،2،3،4،5،6،7،8] ؛ console.log (a ، a.splice (1 ، nan)) ؛ // [1،2،3،4،5،6،8] [] var a = [1،2،3،4،5،6،7،8] ؛ console.log (a ، a.splice (1 ، undefined)) ؛ // [1،2،3،4،5،6،7] [1،2،3،4،5،6،7،8] ؛ console.log (A ، A.Splice (1 ، undefined)) ؛ // [1،2،3،4،5،6،7،8] []
إذا كان هناك المزيد من المعلمات في وقت لاحق ، فهذا يعني أن هذه هي العناصر الجديدة التي سيتم إدراجها في الصفيف
var a = [1،2،3،4،5] ؛ console.log (a ، a.splice (2،0 ، 'a' ، 'b')) ؛ // [1،2 ، 'a' ، 'b' ، 3،4،5] ['a' ، 'b']
طريقة موقف الصفيف
يضيف ES5 طريقتين للموضع إلى مثيلات الصفيف: indexof () و LastIndexof ()
【indexof ()】
تستقبل طريقة indexof (Search ، START) بحثين وبدء معلمتين ، وإعادة الموقع حيث يظهر البحث أولاً ، وإذا لم يتم العثور عليه ، فإنه يعود -1
تشير معلمة البحث إلى العنصر المراد تفتيشه ؛ استخدم مشغل المساواة الصارم (===) للمقارنة
var arr = [1،2،3 ، '1' ، '2' ، '3']
تشير المعلمة START إلى موضع بدء البحث. تستدعي هذه الطريقة ضمنيًا وظيفة التحويل الرقم () لتحويل القيم غير الرقمية (باستثناء غير محددة) إلى أرقام. إذا تم تجاهل هذه المعلمة أو إذا كانت المعلمة غير محددة أو NAN ، ابدأ = 0
var arr = ['a' ، 'b' ، 'c' ، 'd' ، 'e' ، 'a' ، 'b'] e.log (arr.indexof ('a' ، 1)) ؛ // 5console.log (arr.indexof ('a' ، true)) ؛ // 5console.log (arr.indexof ('a' ،-1)) ؛ // max (0 ، -1+7) = 6 ؛ -1console.log (arr.indexof ('a' ،-5)) ؛ // max (0 ، -5+7) = 2 ؛ 5Console.log (arr.indexof ('a' ،-50)) ؛ // max (0 ، -50+7) = 0 ؛ 0 var person = {name: 'nicholas'} ؛ var people = [{name: 'nicholas'}] ALERT (MorePeople.indexof ({name: 'nicholas'})) ؛ //-1 ، لأنها ليست هي نفس المرجعطريقة كتابة متوافقة لطريقة indexof ()
if (typeof array.prototype.indexof! = "function") {array.prototype.indexof = function (searchElement ، fromIndex) {var index = -1 ؛ fromIndex = fromIndex * 1 || 0 ؛ for (var k = 0 ، length = this.length ؛ k <length ؛ k ++) {if (k> = fromIndex && this [k] === searchelement) {index = k ؛ break ؛}} index ؛} ؛}【LastIndexof ()】
على عكس indexof () ، ينظر LastIndExof () من اليمين إلى اليسار
تتلقى طريقة LastIndExof (البحث ، ابدأ) معلمتين بحث وبدء ، وإعادة الموقع حيث يظهر البحث لأول مرة ، وإذا لم يتم العثور عليه ، فإنه يعود -1
تشير معلمة البحث إلى العنصر المراد تفتيشه ؛ استخدم مشغل المساواة الصارم (===) للمقارنة
var arr = [1،2،3 ، '1' ، '2' ، '3']
START تعني موضع بدء البحث ، والذي يتصل ضمنيًا بوظيفة التحويل الرقم () لتحويل القيم غير الرقمية (باستثناء غير محددة) إلى أرقام. إذا تم تجاهل هذه المعلمة أو إذا كانت المعلمة غير محددة أو NAN ، ابدأ = 0
على عكس طريقة LastIndExof () للسلسلة ، عندما تكون طريقة البحث رقمًا سالبًا ، Search = Max (0 ، Length+Search)
var arr = ['a' ، 'b' ، 'c' ، 'd' ، 'e' ، 'a' ، 'b'] ؛ console.log (arr.lastindexof ('b')) ؛ // 6console.log (arr.lastindexof ('b' ، undefined)) ؛ ndefined)) 6console.log (arr.lastindexof ('b' ،-5)) ؛ // max (0 ، -5+7) = 2 ؛ 1console.log (arr.lastindexof ('b' ،-50)) ؛ // max (0 ، -50+7) = 0 ؛ -1【نصائح】 إرجاع جميع قيم الفهرس للعناصر التي تلبي المعايير
يمكن العثور على جميع عناصر المطابقة عن طريق looping لاستدعاء indexof () أو lastIndexof ()
الدالة allindexof (صفيف ، قيمة) {var result = [] ؛ var pos = array.indexof (value) ؛ if (pos === -1) {return -1 ؛} بينما (pos> -1) {result.push (pos) ؛ pos = array.indexof (value ، pos+1) ؛ [1،2،3،3،2،1] ؛ console.log (allindexof (Array ، 1)) ؛ // [0،5]طريقة كتابة متوافقة لطريقة LastIndIndexof ()
if (typeof array.prototype.lastindexof! = "function") {array.prototype.lastindexof = function (searchElement ، fromIndex) {var index = -1 ، length = this.length ؛ fromIndex = fromIndex * 1 || الطول - 1 ؛ لـ (var k = length - 1 ؛ k> -1 ؛ k- = 1) {if (k <= fromIndex && this [k] === searchElement) {index = k ؛ break ؛}} index ؛} ؛}طريقة دمج الصفيف
تشمل طرق دمج الصفيف طرق تقليل () وقلل (). يستخدمون الوظيفة المحددة لدمج عناصر الصفيف لإنشاء قيمة واحدة. هذه عملية شائعة في البرمجة الوظيفية ، والمعروفة أيضًا باسم "الحقن" و "الانهيار"
【يقلل()】
تتطلب طريقة تقليل () معلمتين. الأول هو وظيفة تؤدي عمليات مبسطة. تتمثل مهمة تبسيط الوظائف في استخدام بعض الطرق لدمج قيمتين أو طرح قيمتين في قيمة واحدة وإرجاع القيمة المبسطة.
تقبل الوظيفة المبسطة أربعة معلمات ، وهي:
【1】 المتغير الأولي ، الافتراضية لقيمة العنصر الأول للمصفوفة. يتم استخدام قيمة الإرجاع بعد التنفيذ الأول للوظيفة كمتغير أولي للتنفيذ الثاني للوظيفة ، وهكذا
【2】 المتغير الحالي ، إذا تم تحديد المعلمة الثانية ، فإن المتغير هو قيمة العنصر الأول من الصفيف ، وإلا فإن قيمة العنصر الثاني هي قيمة العنصر الثاني.
【3】 فهرس العناصر المقابلة للمتغير الحالي في الصفيف (بدءًا من 0)
【4】 كائن الصفيف الأصلي
من بين هذه المعلمات الأربعة للوظيفة المبسطة ، لا يلزم سوى أول اثنين ، في حين أن آخر اثنين اختياريان.
القيم. REDUCE (وظيفة (PRIM ، CUR ، INDEX ، ARRAY) {// toDo}) ؛المعلمة الثانية (الاختيارية) لطريقة تخفيض () هي قيمة أولية تنتقل إلى الوظيفة
var a = [1،2،3،4،5] ؛ var sum = a.reduce (function (x ، y) {return x+y} ، 0) ؛ // sum of array var order = 2 ، 3 ، 4 ، 5] .Reduce (الوظيفة (prev ، cur) {console.log (prev ، cur) return prev + cur ؛}) ؛ // 1 2 // 3 3 // 6 4 // 10 5 // النتيجة الأخيرة: 15 [1 ، 2 ، 3 ، 4 ، 5] .Reduce (prev ، cur) {console.log (prev ، cur) ؛ 3 // 6 4 // 10 5 // النتيجة الأخيرة: 15[ملاحظة] نوع نتيجة الإرجاع لطريقة التخفيض () هو نفس القيمة الأولية التي تم تمريرها في
[1 ، 2 ، 3 ، 4 ، 5] .Reduce (الوظيفة (prev ، cur) {console.log (prev.sum ، cur) ؛ prev.sum = prev.sum + cur ؛ return prev ؛} ، {sum: 0}) ؛ // 0 1 // 1 2 // 3 3 3 // 10 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5.باستخدام طريقة تقليل () ، يمكنك كتابة طريقة مجموع لمجموع المصفوفات
Array.Prototype.sum = function () {return this.reduce (function (prev ، cur) {return prev + cur ؛})} ؛ [3،4،5،6،10] .sum () ؛ // 28نظرًا لأن طريقة الحد من كل عنصر في التسلسل ، يمكن استخدامه بالفعل للبحث عن عنصر. على سبيل المثال ، ابحث عن أطول عنصر صفيف
وظيفة FindLongest (إدخالات) {إدخال إدخال. reduce (الوظيفة (prev ، cur) {return cur.length> prev.length؟ cur: prev ؛} ، '') ؛} console.log (findlongest ([1،2،3 ، 'ab' ، 4 ، 'bcd' ، 5،6785،4])) ؛ // 'bcd'يمكنك استخدام طريقة تقليل () لتحقيق تسطيح المصفوفات ثنائية الأبعاد
Matrix var = [[[1 ، 2] ، [3 ، 4] ، [5 ، 6]] ؛ // 2d Array Flatten var flatten = matrix.reduce (function (prev ، cur) {return prev.concat (cur) ؛}) ؛ console.log (flatten) ؛ // [1 ، 2 ، 3 ، 4 ، 5 ، 6]في صفيف فارغ ، فإن استدعاء الحد () بدون معلمة القيمة الأولية سوف يؤدي إلى استثناء خطأ في النوع. إذا كانت هناك قيمة واحدة فقط عند استدعاءها - تحتوي الصفيف على عنصر واحد فقط ولم يتم تحديد أي قيمة أولية ، أو هناك صفيف فارغ ويتم تحديد قيمة أولية - تقليل () ببساطة إرجاع هذه القيمة دون استدعاء الوظيفة المبسطة
var arr = []
طريقة كتابة متوافقة لتقليل () طريقة
if (typeof array.prototype.reduce! = "function") {array.prototype.reduce = function (callback ، initialValue) {var previce = inialValue ، k = 0 ، length = this.length ؛ if (kypeof inialValue ==== "undefined") الطول ؛ K ++)【التخفيض ()】
يعمل المخفض () على نفس القدر من التقليل () ، والفرق هو أنه يعالج الصفيف من ارتفاع إلى منخفض (يمين إلى اليسار) وفقًا لمؤشر المصفوفة ، وليس من منخفض إلى مرتفع
VAR DATIONS = [1،2،3،4،5] ؛ var sum = values.reduceright (function (prev ، cur ، index ، array) {console.log (prev ، cur) ؛ return prev + cur ؛}) ؛ console.log (sum) ؛ // 5 4 4 // 9 3 // 14 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1.طريقة الكتابة المتوافقة مع الأسلوب المخفض ()
if (typeof array.prototype.reduceright! = "function") {array.prototype.reducerIGH {for (k ؛ k> -1 ؛ k- = 1) {this.hasownproperty (k) && (previour = callback (سابق ، هذا [k] ، k ، هذا)) ؛}} العودة السابقة ؛} ؛}طريقة تكرار الصفيف
يحدد ECMASCript5 5 طرق تكرارية للصفائف. تتلقى كل طريقة معلمتين: الوظيفة التي يتم تشغيلها على كل عنصر وكائن النطاق الذي (اختياري) يعمل على تشغيل الوظيفة - مما يؤثر على قيمة هذا. تتلقى الوظائف التي تم تمريرها في هذه الطرق ثلاث معلمات: قيمة عنصر الصفيف ، وموضع العنصر في الصفيف ، وكائن المصفوفة نفسه. اعتمادًا على الطريقة المستخدمة ، قد تؤثر أو لا تؤثر أو لا تؤثر قيمة الإرجاع بعد تنفيذ هذه الوظيفة
الدالة (العنصر ، الفهرس ، المصفوفة) {// todo}【رسم خريطة()】
تقوم طريقة MAP () بتشغيل وظيفة معينة على كل عنصر من عناصر الصفيف ، مع إرجاع صفيف مكون من نتائج كل استدعاء دالة
// F هي الوظيفة التي يطلق عليها كل عنصر من عناصر الصفيف. تصبح قيمة الإرجاع عنصر صفيف الإرجاع ؛ o هي اختيارية هذه القيمة عندما تسمى f array.map (f ، o) ؛ [1،2،3] .map (وظيفة (العنصر ، الفهرس ، arr) {عنصر إرجاع*العنصر}) ؛ // [1،4،9] [1،2،3] .map (وظيفة (عنصر ، فهرس ، arr) {index*index}) ؛ // [0،2،6]يمكن أن تقبل طريقة MAP () أيضًا معلمة ثانية ، مما يشير إلى الكائن المشار إليه من خلال ذلك عند تنفيذ وظيفة رد الاتصال
var arr = ['a' ، 'b' ، 'c'] ؛ [1،2] .map (function (item ، index ، arr) {return this [item]} ، arr) ؛ // ['b' ، 'c']عند استخدامه في الممارسة العملية ، يمكنك استخدام طريقة MAP () لتسهيل اكتساب قيم سمة محددة في صفيف الكائن
var users = [{name: 't1' ، البريد الإلكتروني:'[email protected] '} ، {name:' t2 '، البريد الإلكتروني:'[email protected]'} ، {name: 't3' ، البريد الإلكتروني:'[email protected] '}] "[email protected]" ، "[email protected]"]يمكن أيضًا استخدام طريقة MAP () لكائنات صفيف الفئة
array.prototype.map.call ('abc' ، function (العنصر ، index ، arr) {return item.touppercase ()}) ؛ // ["a" ، "b" ، "c"]بالنسبة للصفائف المتفرقة ، لا تستدعي طريقة MAP () الوظيفة على رقم التسلسل حيث لا يوجد العنصر بالفعل.
var a = [1 ، ، 3] ؛ console.log (a.map (وظيفة (العنصر ، الفهرس ، arr) {return item*2 ؛})) ؛ // [2 ، 2: 6]MAP () طريقة الكتابة المتوافقة مع الطريقة
if (typeof array.prototype.map! = "function") {array.prototype.map = function (fn ، context) {var arr = [] arr ؛} ؛}【foreach ()】
تقوم طريقة foreach () بتشغيل وظيفة معينة على كل عنصر في الصفيف ، وهذه الطريقة لا تُرجع قيمة. في الأساس نفس تكرار صفيف للحلقة. إذا كنت بحاجة إلى قيمة إرجاع ، فعادة ما تستخدم طريقة الخريطة
[1،2،3،4]
على غرار الحلقة أدناه
var array = [1 ، 2 ، 3 ، 4] ؛ for (var k = 0 ، length = array.length ؛ k <length ؛ k ++) {console.log (Array [k]) ؛}استخدم طريقة foreach () لتنفيذ إضافة بسيطة
var sum = 0 ؛ [1 ، 2 ، 3 ، 4].
بالإضافة إلى قبول معلمة دالة رد الاتصال اللازمة ، يمكن للمعلمة الثانية أيضًا قبول معلمة سياق اختياري (تغيير هذا المؤشر في وظيفة رد الاتصال)
var out = [] ؛ [1 ، 2 ، 3].
المعلمة الثانية مفيدة للغاية بالنسبة لطبقة متعددة ، لأن هذا متعدد الطبقات عادة ما يشير إلى غير متسق ، يمكنك استخدام المعلمة الثانية لطريقة foreach () لإصلاح هذا
var obj = {name: 'Zhang San' ، times: [1 ، 2 ، 3] ، print: function () {// هذا يشير إلى objconsole.log (this) ؛ this.times.foreach (function (n) {// هذا يشير إلى windowconsole.log (this) ؛}) ؛}} ؛ obj.print () ؛ var obj = {name: 'Zhang San' ، الأوقات: [1 ، 2 ، 3] ، print: function () {// هذا يشير إلى objconsole.log (this) ؛ this.times.foreach (function (n) {// هذا يشير هذا أيضًا إلى objconsole.log (this) ؛} ، this) ؛}} ؛ obj.print () ؛يمكن استخدام حلقة Foreach () لكائنات صفيف الفئة
var str = 'abc' ؛ array.prototype.foreach.call (str ، function (item ، index ، array) {console.log (item + ':' + index) ؛}) ؛ // a: 0 // b: 1 // c: 2على عكس الحلقات ، بالنسبة للصفائف المتفرقة ، فإن طريقة foreach () لا تستدعي الوظيفة على رقم الطلب حيث لا يوجد عنصر بالفعل.
var a = [1،2،3] ؛ red a [1] ؛ for (var i = 0 ؛ i <a.length ؛ i ++) {console.log (a [i]) ؛} // 1 // undefined // 3 a.foreach (function (item ، index ، arr) {console.log (item)}) ؛ // 1 // 3 // 3.لا يمكن أن تنهي طريقة foreach () اجتيازًا قبل تمرير جميع العناصر إلى الوظيفة المدعومة. وهذا هو ، لا يوجد بيان كسر مقابل مثل تلك المستخدمة في الحلقة. إذا كنت ترغب في الإنهاء مبكرًا ، فيجب عليك وضع طريقة foreach () في كتلة المحاولة ورمي استثناء
لـ (var i = 0 ؛ i <5 ؛ i ++) {if (i == 2) break ؛} console.log (i) ؛ // 2 var a = [1،2،3،4،5] ؛ console.log (a.foreach (function ، index ، arr) {if (index == 2) break ؛ var a = [1،2،3،4،5] ؛ a.foreach (الوظيفة (العنصر ، index ، arr) {try {if (item == 2) remer new error ؛} catch (e) {console.log (item) ؛}}) ؛foreach () طريقة الكتابة المتوافقة
if (typeof array.prototype.foreach! = 'function') {array.prototype.foreach = function (fn ، context) {for (var k = 0 ، length = this.length ؛ k <length ؛ k ++) {if (typeof fn === ' Object.prototype.hasownproperty.call (this ، k)) {fn.call (السياق ، هذا [k] ، k ، هذا) ؛}}}}}【فلتر()】
تقوم طريقة Filter () بتشغيل وظيفة معينة على كل عنصر في الصفيف ، وتُرجع مجموعة من العناصر التي ستعود بشكل صحيح. غالبًا ما يتم استخدام هذه الطريقة للاستعلام عن جميع عناصر الصفيف التي تلبي المعايير
[1 ، 2 ، 3 ، 4 ، 5] .filter (وظيفة (elem) {return (elem> 3) ؛}) ؛ // [4 ، 5] [0 ، 1 ، 'a' ، false] .filter (boolean) ؛ // [1 ، "a"] [1 ، 2 ، 3 ، 4 ، 5]. 3 ، 5]يمكن أن تقبل طريقة المرشح () أيضًا معلمة ثانية ، تحدد كائن السياق (هذا الكائن) حيث توجد وظيفة الاختبار
var obj = function () {this.max = 3 ؛} ؛ var myfilter = function (item) {if (item> this.max) {return true ؛}} ؛ var arr = [2 ، 8 ، 4 ، 4 ، 1 ، 3 ، 2 ، 9]سوف تصفية () تخطي العناصر المفقودة في المصفوفات المتفرقة. صفيف العائد دائمًا كثيف ، بحيث يمكنه ضغط الفجوات في المصفوفات المتفرقة.
var a = [1،2 ،،،، 3 ،،، 4] ؛ console.log (A.Length) ؛ // 10var density = A.Filter (function () {return true ؛}) console.log (كثيف ، كثيف. الطول) ؛ // [1،2،3،4] 4إذا كنت ترغب في ضغط الشواغر وحذف العناصر غير المحددة والخالية ، فيمكنك استخدام طريقة المرشح () مثل هذا
var a = [1،2 ،، undefined ،، 3 ،، null ،، 4] ؛ console.log (a.length) ؛ // 10var density = a.filter (function (item) {return item! = undefined ؛}) console.log (كثيف ، طول) ؛ // [1،2،3،4]Filter () طريقة الكتابة المتوافقة
if (typeof array.prototype.filter! = "function") {array.prototype.filter = function (fn ، context) {var arr = [] ؛ if (typeof fn ==== "function") {for (var k = 0 ، length = this.length ؛ k <length ؛ k ++) {fn.call arr.push (هذا [k]) ؛}} return arr ؛} ؛}【بعض()】
تقوم طريقة بعض () بتشغيل وظيفة معينة على كل عنصر في الصفيف ، وإذا كانت الوظيفة تُرجع بشكل صحيح لأي من العناصر ، فإنها تُرجع صحيحًا. وإذا وفقط إذا كانت جميع العناصر في القيمة تدعو إلى إرجاع وظيفة القرار ، فإنها تُرجع كاذبة
a = [1،2،3،4،5] ؛ a.some (وظيفة (elem ، index ، arr) {return elem ٪ 2 === 0 ؛}) // truea.some (isnan) ؛ // falseسيعود استدعاء بعض طريقة () على صفيف فارغ كاذبة
[] .some (function () {}) ؛ // falseبعض () طريقة الكتابة المتوافقة مع الطريقة
if (typeof Array.prototype.some != "function") {Array.prototype.some = function (fn, context) {var passed = false;if (typeof fn === "function") {for (var k = 0, length = this.length; k < length; k++) {if (passed === true) break;passed = !!fn.call(context, this[k], k, this);}}return passed;};}【كل()】
every()方法对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true;只要有一项返回false,则返回false
a = [1,2,3,4,5];a.every(function(elem, index, arr){elem < 10;})//truea.every(function(elem, index, arr){return elem%2 ===0;});//false在空数组上调用every()方法会返回true
[].every(function(){});//trueevery()方法兼容写法
if (typeof Array.prototype.every != "function") {Array.prototype.every = function (fn, context) {var passed = true;if (typeof fn === "function") {for (var k = 0, length = this.length; k < length; k++) {if (passed === false) break;passed = !!fn.call(context, this[k], k, this);}}return passed;};}لخص
يتم تعريف طرق صفيف JavaScript على وجه التحديد على أنها عامة ، لذلك فهي تعمل بشكل صحيح ليس فقط على المصفوفات الحقيقية ولكن أيضًا على كائنات صفيف الفئة. Of these 22 methods, all methods except toString() and toLocaleString() are common
可以改变原数组的方法总共有7种:包括unshift()、shift()、push()、pop()这4种栈和队列方法,reverse()和sort()这2种数组排列方法,数组删改方法splice()
The above is the 22 must-learn methods of arrays in JavaScript introduced to you by the editor (recommended). آمل أن يكون ذلك مفيدًا لك. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر إليك في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!