يحدد ECMAScript 5 طرق تكرار للمصفوفات. تتلقى كل طريقة معلمتين: دالة يتم تشغيلها مع كل عنصر كوسيطة، وكائن نطاق اختياري كسياق يتم تشغيل الوظيفة فيه (يؤثر على قيمة هذا في الوظيفة). تتلقى الوظيفة التي تم تمريرها إلى كل أسلوب ثلاث معلمات: عنصر المصفوفة، وفهرس العنصر، والمصفوفة نفسها. اعتمادًا على الطريقة المحددة، قد تؤثر أو لا تؤثر نتائج هذه الوظيفة على القيمة المرجعة للطريقة. طرق التكرار الخمسة للمصفوفة هي كما يلي.
1. طريقة الخريطة: قم بتشغيل الوظيفة التي تم تمريرها على كل عنصر في المصفوفة وإرجاع مصفوفة مكونة من نتائج كل استدعاء دالة،
ويمكن أيضًا فهمها على النحو التالي: بعد إجراء معالجة خاصة على كل عنصر في المصفوفة، قم بإرجاع مصفوفة جديدة .
على سبيل المثال:
قبل تبسيط مصفوفة الأسعار:
دع الأسعار=[50,80,90] الأسعار=prices.map((البند,الفهرس)=>{ إرجاع العنصر + "يوان" })
بعد اختصار
console.log(prices):
دع السعر=[50,80,120] // أضف "يوان" بعد سعر الوحدة السعر=price.map(item=>item+"يوان") console.log(price)// الإخراج هو ['50 يوان'، '80 يوان'، '90 يوان']
سيناريو التطبيق الخاص به هو على سبيل المثال:
يستخدم برنامج WeChat الصغير Douban Film Review طريقة الخريطة لاستبدال xxx
باستبدال www( ) الطريقة المستخدمة لاستبدال بعض الأحرف بأحرف أخرى في سلسلة، أو استبدال سلسلة فرعية تطابق تعبيرًا عاديًا.
دع الأفلام=[{id:1,name:"Shawshank Redemption",imgUrl:"http://xxx.douban.com/1.jpg"},{id:2,name:"Shawshank Redemption",imgUrl :" http://xxx.douban.com/2.jpg"},{id:3,name:"Shawshank Redemption",imgUrl:"http://xxx.douban.com/1.jpg"}] الأفلام=movies.map(item=>{ item.imgUrl=item.imgUrl.replace("xxx"،"www") البند العودة }) console.log(movies)
2. طريقة التصفية: قم بتشغيل الوظيفة التي تم تمريرها على كل عنصر من عناصر المصفوفة. العناصر التي ترجعها الوظيفة صحيحة ستشكل مصفوفة وتعود.
يمكن أن يُفهم أيضًا على النحو التالي: تصفية العناصر الموجودة في المصفوفة التي تفي بالمتطلبات وإرجاع مصفوفة جديدة
تسمح بالدرجات=[80,59,10,55,90,88] دع arr=scores.filter(item=>{ إذا (البند> 60) { العودة صحيحا } }) console.log(arr)// الإخراج كما هو موضح أدناه:
الإخراج كما هو موضح أدناه وتصفية المصفوفات الأقل من 60
بعد الاختصار:
دع الدرجات=[80,59,10,55,90,88] دع arr=scores.filter(item=>item>=60) console.log(arr)//(3) [80, 90, 88]
في سيناريو التطبيق الخاص به، يمكنك وضع مجموعة من أسماء المدن ثم البحث عن الكلمات الرئيسية، وهذا فقط عندما تكون البيانات صغيرة كتاب عن المثال لاحقًا سيتضمن سيناريوهات التطبيق لنظام الإدارة عمليات البحث عن الكلمات الرئيسية كمرجع.
Some في اللغة الإنجليزية على أنها بعض، ويتم ترجمة every كـ all، كل منها، لذا فإن الطريقة some ستعود صحيحة طالما أن إحداها صحيحة. يجب أن تُرجع جميع الأساليب صحيحًا قبل أن تتمكن من العودة صحيحًا، حتى لو كان هناك خطأ واحد، فسيتم إرجاع الخطأ
أثناء عملية الحكم على المصفوفة، ويتم الحكم على ما إذا كان كل عنصر من عناصر الكل يلبي المتطلبات الأساسية
: واحد صحيح و صحيح، ما دامت إحداهما متطابقة، فإنها ستعود صحيحة.
كل طريقة: واحدة خاطئة خاطئة، طالما أن إحداها لا تفي بالمتطلبات، فسوف تُرجع خطأ
// دع درجات جميع الطلاب في الفصل لمعرفة ما إذا كان الجميع قد نجحوا Let Scores=[80,49,12 ,50,69 ] دع النتيجة=scores.every(item=>item>=60) console.log(result)//Return false لم يتم تمرير جميع
سيناريوهات الاستخدام: قبل أن يرسل مدقق الواجهة الأمامية طلب AJAX، فإنه عادةً ما يحتاج إلى تمرير جميع عمليات التحقق قبل إرساله مقالة عن أمثلة التعليمات البرمجية.
5. طريقة التخفيض: يوفر ECMAScript طريقتين لدمج المصفوفات: تقليل () وتخفيض اليمين (). تتكرر كلتا الطريقتين على جميع عناصر المصفوفة وتنشئ قيمة إرجاع نهائية بناءً على ذلك. تنتقل طريقة التخفيض () من العنصر الأول إلى العنصر الأخير في المصفوفة. وينتقل الدالة تقليلRight() من العنصر الأخير إلى العنصر الأول. ويمكن أيضًا فهمه ببساطة على أنه: دمج العناصر الموجودة في المصفوفة وإرجاع محتوى جديد.
تقبل كلتا الطريقتين معلمتين: وظيفة الدمج التي سيتم تشغيلها على كل عنصر، والقيمة الأولية الاختيارية لبدء الدمج منها. تتلقى الوظائف التي تم تمريرها لتقليل () وReduceRight () أربع معلمات: القيمة المدمجة السابقة، والعنصر الحالي، وفهرس العنصر الحالي، والمصفوفة نفسها. سيتم استخدام أي قيمة يتم إرجاعها بواسطة هذه الوظيفة كوسيطة أولى في الاستدعاء التالي لنفس الوظيفة. إذا لم يتم تمرير المعلمة الثانية الاختيارية (كقيمة بداية الدمج) إلى هاتين الطريقتين، فسيبدأ التكرار الأول من العنصر الثاني في المصفوفة، لذا فإن المعلمة الأولى التي تم تمريرها إلى وظيفة الدمج هي العنصر الأول. المعلمة الثانية هي العنصر الثاني من المصفوفة.
افهم المفهوم أولاً من خلال الكود التالي:
معنى المعلمات الأربعة في الكود التالي:
prev: النتيجة التي تم إرجاعها بواسطة
عنصر العملية السابقة: عنصر
فهرس العملية هذه: قيمة الفهرس لعنصر
مصفوفة العملية هذه: مجموعة من العملية الحالية
دع arr =[20,40,50,21] دع القيم=arr.reduce((prev,item,index,array)=>{ console.log("السابق"+السابق) console.log("العنصر"+العنصر) console.log("الفهرس"+الفهرس) console.log("صفيف"+صفيف) console.log("____________________") })
الإخراج هو:
لماذا يتكرر ثلاث مرات فقط؟ يمكن تعيين القيمة الافتراضية إذا لم يتم تعيين القيمة الافتراضية، فسيكون العنصر الأول هو العنصر السابق الأول.
لماذا يصبح السابق غير محدد في الحلقتين الثانية والثالثة؟ في الحلقة الثانية، يجب عليك الحصول على القيمة المرجعة للحلقة الأولى، لأنه لم يتم تعيين الإرجاع في المرة الأولى، لذلك تحصل على غير محدد وما إلى ذلك،
إذا فهمت ما ورد أعلاه، فلنبدأ في تنفيذ جمع المصفوفة:
Let آر=[20 ,40,50,21] دع القيم=arr.reduce((prev,item,index,array)=>{ console.log("السابق"+السابق) إرجاع العنصر السابق+ // أعط إرجاعًا وحلقة أربع مرات. في المرة الأولى يكون الإخراج السابق 20، والمرة الثانية 40 + 20 هو 60، والمرة الثالثة هي 110، والمرة الأخيرة هي 131. }) console.log(values) //131
متى يجب تعيين القيمة الافتراضية للسابق؟
أضف <li> </li> إلى كل عنصر من عناصر المصفوفة
Let arr=["Eason Chan"، "Miriam Yeung"، "Juji Ku"، "Hacken Lee"] // قم بتعيين قيمة افتراضية للوظيفة السابقة: الوظيفة 1. تشارك جميع العناصر في الحلقة 2. تحديد محتوى الإرجاع Let result=arr.reduce((prev,item)=>{ //console.log(السابق) إرجاع السابق+"<li>"+item+"</li>" }")// أضف سلسلة فارغة console.log(result)//<li>Eason Chan</li><li>Miriam Yeung</li><li>Juji Ku</li><li>Keqin Li</li> li>
لنأخذ حالة أخرى:
استخدم التصغير لتحقيق إلغاء البيانات المكررة للمصفوفة، وإنشاء مصفوفة فارغة، واجتياز المصفوفة الأصلية بالتسلسل، وإدراج ما ليس موجودًا في المصفوفة الفارغة، وما لم يتم إدراجه لن يتم إدراجه بعد الآن
Let arr=["Zhang San"،" Li Si"، "Li Si"، "Wang Er"، "Li Si"، "Mazi"، "Zhang San"] دع النتيجة=arr.reduce((prev,item)=>{ // يتضمن يحدد ما إذا كان هناك عنصر محدد ويعيد t، وإلا فإنه يُرجع f. إذا(!prev.includes(العنصر)){ prev.push(item) //.push() يضيف عنصرًا جديدًا إلى المصفوفة} العودة السابقة },[])// تعيين مصفوفة فارغة افتراضية console.log(result)//(4) ['Zhang San', 'Li Si', 'Wang Er', 'Mazi']
حالة أخرى: (طريقة التصغير أنت يمكنه فعل أشياء كثيرة)
حساب عدد مرات ظهور الأحرف: راجع الكود أدناه
Let arr=["a"،"b"،"a"،"c"،"b"،"a"، "c"] // قم بإرجاع كائن لحساب عدد مرات ظهور كل حرف {a:2,w:3} دع النتيجة=arr.reduce((prev,item)=>{ // // تحديد ما إذا كان الكائن له سمات مقابلة if(item in prev){ // ابحث عن قيمة السمة المقابلة++ prev[item]++ //إذا كنت ترغب في تعيين سمات الكائن أو الحصول عليها في المستقبل، فسيتم تمثيل هذه السمة بواسطة متغير على شكل قوسين []++، إذا كان مباشرًا. سيكون اسم السمة مكتوبًا شكل.}آخر{ السابق[البند]=1 } العودة السابقة },{}) console.log(نتيجة)//{أ: 3، ب: 2، ج: 2}