لدى JavaScript وظيفتين قويتين وشعبيتين بين المطورين: الانقسام والانضمام. يمكن أن تتبادل هاتان الوظيفتان على حد سواء نوع السلسلة والصفيف ، أي ، يمكن تسلسل المصفوفات في سلاسل ، والعكس صحيح. يمكننا لعب هاتين وظيفتين بالكامل. دعنا نستكشف بعض التطبيقات المثيرة للاهتمام هنا. أولاً ، دعونا نقدم هاتين وظيفتين:
string.prototype.split (فاصل ، حد)
يقسم الفاصل السلسلة إلى صفيف ، ويحدد حد المعلمة الاختيارية الحد الأقصى لطول الصفيف الذي تم إنشاؤه.
"85 86@53" .Split ('') ؛ // ['85' ، '86' ، '53'] ؛ "Banana" .Split () ؛ //["موز"]؛ // (شكرا بيتر (-:) "الرئيس ، مجلس الشيوخ ، مجلس النواب".يقوم فاصل المعلمة الاختياري بتحويل الصفيف إلى سلسلة. إذا لم يتم توفير الفاصل ، فسيتم استخدام الفاصلة كقيمة المعلمة (تمامًا مثل وظيفة tostring للمصفوفة).
["Slugs" ، "Snails" ، "Puppy Dog's Tails"]. انضم ('و') ؛ // "الرخويات والقواقع وذيل كلب الجرو" ["العمالقة" ، 4 ، "رينجرز" ، 1]. // "Giants 4 Rangers 1" [1962،1989،2002،2010]. Join () ؛فيما يلي بعض التطبيقات:
Replaceall
هذه الوظيفة البسيطة لا تشبه وظيفة الاستبدال الأصلية ، يمكن استبدالها كسلسلة فرعية عالمية دون استخدام تعبيرات منتظمة.
string.prototype.replaceall = function (find ، replacewith) {return this.split (find). join (replacewith) ؛ } "الرجل والخطة" .replaceall ('the' ، 'a') ؛ // "رجل وخطة"بالنسبة للسلاسل الصغيرة ، تكون أضعف قليلاً من الوظائف الأصلية التي يتم استبدالها بحرف واحد (هنا تشير إلى وظيفتين إضافيتين للتعبير العادي) ، ولكن تحت Mozilla ، إذا تجاوزت الشخصية 2 أو 3 أحرف ، فإن وظيفة الاستخدام هذه تعمل بشكل أسرع من التعبير العادي.
حدث
يمكن أن تحصل هذه الوظيفة على عدد الأساسيات. علاوة على ذلك ، فإن هذا النوع من الوظائف مباشرة للغاية ولا يتطلب الانتظام.
string.prototype.Occurences = function (find ، matchcase) {var text = this ؛ Matchcase || (find = find.toLowerCase () ، text = text.toLowerCase ()) ؛ إرجاع النص. } document.body.innerhtml.Occurences ("div") ؛ // google home page يحتوي على 114document.body.innerhtml.Occurences ("/div") ؛ // تحتوي صفحة Google الرئيسية على 57 "إنجلترا تشرك مهندسيها". // 2repeatتم استعارة هذه الوظيفة من النموذج الأولي.
string.prototype.repeat = function (times) {return new array (times+1). Join (this) ؛ } "GO" .repeat (3) + "عمالقة!" ؛ // "Go Go Go Giants!"يكمن جمالها في استخدام وظيفة الانضمام. ينصب التركيز على قيمة معلمة الفاصل هذه ، ثم تحتوي هذه المجموعة الأساسية فقط على بعض قيم القيمة غير المحددة. لتوضيح ذلك بشكل أكثر وضوحًا ، دعنا نعيد إنشاء المثال أعلاه:
[غير محدد ، غير محدد ، غير محدد ، غير محدد].
تذكر أنه قبل الانضمام ، سيتم تحويل كل عنصر صفيف إلى سلسلة (إليك سلسلة فارغة). يعد تطبيق وظيفة التكرار هذه واحدة من التطبيقات القليلة غير الممكنة التي تحدد المصفوفات من خلال حرفي الصفيف.
استخدام المعلمة الحد
نادراً ما أستخدم المعلمات الاختيارية لدالة الانقسام. فيما يلي مثال باستخدام هذا الحد:
var getDomain = function (url) {return url.split ('/' ، 3) entapart.com "getDomain (" https://addons.mozilla.org/en-us/firefox/bookmarks/ ") ؛ //" https://addons.mozilla.org "تعديل الأعضاء العددية
إذا خلطنا النظاميين معًا ، فيمكن للانضمام والانقسام تعديل أعضاء الصفيف بسهولة. ومع ذلك ، فإن هذه الوظيفة ليست صعبة كما يتخيل. وظيفتها الرئيسية هي إزالة السلسلة المحددة أمام كل عضو في الصفيف المعطى.
var beeadmembers = function (arr ، removestr) {var regex = regexp ("[،]؟" + removestr) ؛ return arr.join (). split (regex) .slice (1) ؛} // قم بعمل صفيف يحتوي فقط على الجزء الرقمي من أرقام الرؤوس الرئوية (["BA015" ، "BA129" ، "BA130"] ؛ // ["015" ، "129" ، "130"]لسوء الحظ ، تفشل هذه الوظيفة في IE لأنهم يزيلون عن طريق الخطأ أول عضو فارغ من الانقسام. الآن دعنا نصحح هذه الوظيفة:
var beeadmembers = function (arr ، removestr) {var regex = regexp ("[،]؟" + removestr) ؛ var result = arr.join (). split (regex) ؛ نتيجة العودة [0] && النتيجة || النتيجة. Slice (1) ؛ // أي الحل البديل}لماذا نستخدم هذه التقنية بدلاً من وظيفة خريطة الصفيف في Emascript 5؟
["BA015" ، "BA129" ، "BA130"]. الخريطة (وظيفة (e) {return e.replace ('ba' ، '')}) ؛ // ["015" ، "129" ، "130"]في الاستخدام الفعلي ، عندما يكون ذلك ممكنًا ، عادةً ما أستخدم وظيفة الخريطة الأصلية (غير متوفرة أدناه IE <9). يتم استخدام المثال التالي فقط كأداة تعليمية ، ولكن تجدر الإشارة إلى أن بناء جملة استدعاء Join و Split أكثر إيجازًا وتوجيهًا. الأكثر إثارة للاهتمام ، إنه أيضًا فعال للغاية ، خاصة بالنسبة للمصفوفات الصغيرة ، وهو أكثر كفاءة في FF و Safari. بالنسبة للمصفوفات الكبيرة ، تكون وظائف الخريطة أكثر ملاءمة. (في جميع المتصفحات) ، سيكون هناك عدد أقل من مكالمات الوظائف للانضمام وتقسيم الوظائف.
// test 1-باستخدام Join/splitvar arr = [] ، x = 1000 ؛ بينما (x--) {arr.push ("ba" + x) ؛} var beakeadmembers = function (arr ، regex) {return arr.join (). split (regex) .slice (1) ؛} var regex = regexp (". 1000 ؛ بينما (y--) {beeadmembers (arr ، regex) ؛} ؛ +تاريخ جديد-توقيت ؛ // ff 3.6 733ms // ch 7 464ms // sa 5 701ms // ie 8 1256ms // test 2-باستخدام وظيفة الخريطة الأصلية arr = [] ، x = 1000 ؛ التاريخ ، y = 1000 ؛ بينما (y--) {arr.map (function (e) {return e.Replace ('ba' ، '')}) ؛مطابقة نمط
تحتاج المصفوفات إلى إجراء مطابقة للأنماط باستمرار ، لكن السلاسل لا. يمكن استخدام التعبيرات العادية في السلاسل ، ولكن ليس في المصفوفات. إن قوة تحويل المصفوفات إلى سلاسل لمطابقة الأنماط تتجاوز بكثير نطاق هذه المقالة. دعونا نلقي نظرة على تطبيق بسيط منه.
افترض أن نتائج السباق في السباق تحتاج إلى إنقاذ الصفيف. والغرض من ذلك هو وضع المتسابقين ووقت تسجيلهم بالتناوب في صفيف. يمكننا استخدام التعبيرات المنتظمة والتحقق مما إذا كان نمط التخزين هذا صحيحًا. الكود التالي هو معرفة وقت السجل الفائت من خلال البحث عن اسمين متتاليين.
var results = ['sunil' ، '23: 09 '،' bob '، '22: 09' ، 'Carlos' ، 'Mary' ، '22: 59 '] // ["كارلوس ، ماري"]