كيفية عنوان حالة جملة في JavaScript

هل تتذكر في المدرسة الابتدائية عندما أوضح لك مدرسك كيفية كتابة ورقة بشكل صحيح؟ أول شيء تبدأ به هو عنوان جيد ، وكل عنوان جيد مكتوب بشكل صحيح.

خلال تحدي البرمجة النصية للخوارزمية ، سنتعلم كيفية تسمية حالة جملة في JavaScript. في النهاية ، سنحصل على خوارزمية لدينا تأخذ جملة ونكتب الحرف الأول من كل كلمة بأحرف كبيرة كما لو كان عنوان بحث.

تعليمات الخوارزمية

قم بإعادة السلسلة المقدمة بالحرف الأول من كل كلمة بحرف كبير. تأكد من أن بقية الكلمة مكتوبة بأحرف صغيرة. لغرض هذا التمرين ، يجب أيضًا كتابة الكلمات المتصلة مثل "the" و "of".

حالات الاختبار المقدمة

  • titleCase("I'm a little tea pot")يجب أن ترجع سلسلة.
  • titleCase("I'm a little tea pot")يجب أن يعود I'm A Little Tea Pot.
  • titleCase("sHoRt AnD sToUt")يجب أن يعود Short And Stout.
  • titleCase("HERE IS MY HANDLE HERE IS MY SPOUT")يجب أن يعود Here Is My Handle Here Is My Spout.

الحل رقم 1: الخريطة () و. slice ()

بيداك

فهم المشكلة : لدينا مدخل واحد ، سلسلة. ناتجنا هو أيضا سلسلة. في النهاية ، نريد إرجاع سلسلة الإدخال بالحرف الأول - والحرف الأول فقط - من كل كلمة بأحرف كبيرة.

أمثلة / حالات الاختبار : توضح حالات الاختبار المقدمة لدينا أنه يجب أن يكون لدينا حرف كبير فقط في بداية كل كلمة. نحن بحاجة إلى تقليل الأحرف الباقية. تُظهر حالات الاختبار المقدمة أيضًا أننا لا نلقي بأي كرات منحنية من حيث الكلمات المركبة الغريبة المفصولة برموز بدلاً من المسافات البيضاء. هذه أخبار جيدة لنا!

بنية البيانات : سيتعين علينا تحويل سلسلة الإدخال الخاصة بنا إلى مصفوفة من أجل معالجة كل كلمة على حدة.

بضع ملاحظات حول الطرق التي سنستخدمها:

دعنا نتحدث عن .map():

.map() ينشئ مصفوفة جديدة بنتائج استدعاء دالة على كل عنصر في المصفوفة.

بمعنى آخر ، .map()يسمح لنا بمعالجة كل عنصر في مصفوفة بوظيفة ، ثم إعادة مصفوفة جديدة بنتائج التلاعب لدينا. يمكن أن تستهدف الوظيفة كلاً من CurrentValue ومؤشر تلك CurrentValue ، مثل:

array.map((currentValue, Index) => { // manipulate the currentValue in some way})

لا يتعين علينا دائمًا استخدام الفهرس. ومع ذلك ، ستكون هناك أوقات نحتاج فيها إلى استهداف عناصر المصفوفة بواسطة فهرسها ، لذلك من السهل تذكرها.

الآن دعنا نرى مثالاً .map()عمليًا. لدينا مصفوفة مليئة بالأرقام ونريد ضرب كل رقم في 2.

let arrayOfNumbers = [3, 6, 10, 42, 98]arrayOfNumbers.map(number => number * 2)// returns [6, 12, 20, 84, 196]

الآن دعنا نتحرى .slice():

.slice()يستخرج قسمًا من سلسلة ما ويعيده كسلسلة جديدة. إذا استدعيت .slice()سلسلة دون تمرير أي معلومات إضافية ، فستعيد السلسلة بأكملها.

"Bastian".slice()// returns "Bastian"

لدينا خيار تمرير .slice()startIndex و endIndex ، مثل ذلك

.slice(beginIndex, endIndex)

هذا يخبرنا عن .slice()مكان بدء التقطيع ومكان إنهاء التقطيع. ضع في اعتبارك أن السلاسل مفهرسة بصفر! لذلك إذا أردنا العودة من الحرف "Bastian" ذي الفهرس 2 حتى ولكن بدون تضمين الحرف 5 المفهرس لـ "Bastian" ، فيمكننا القيام بذلك:

"Bastian".slice(2, 5)// returns "sti"

مع أخذ ذلك في الاعتبار ، يمكننا أن نقطع بداية الكلمات ونعيد باقي الكلمات من خلال تمرير مؤشر Beginndex فقط ، مثل:

"Bastian".slice(3)// returns "tian"

الخوارزمية :

  1. تحويل جميع الأحرف strإلى أحرف صغيرة.
  2. قسّم الأحرف الصغيرة strإلى مصفوفة ، بحيث تكون كل كلمة عنصرًا منفصلاً في المصفوفة.
  3. اجعل الحرف الأول من كل عنصر في المصفوفة كبيرًا.
  4. اربط كل عنصر من عناصر المصفوفة في سلسلة واحدة ، وافصل كل كلمة بمسافة بيضاء.
  5. إعادة سلسلة العنوان المغلفة.

الكود : انظر أدناه!

لقد أنشأت الكثير من المتغيرات المحلية غير الضرورية في الكود أعلاه لإظهار تأثير كل طريقة على الإدخال. أدناه أزلت المتغيرات المحلية ، وربطت جميع الطرق معًا ، وأزلت التعليقات.

الحل رقم 2: regex

تحذير! Regex ليس هو الحل الأفضل للمبتدئين. تعد التعبيرات العادية صعبة في حد ذاتها ، كما أن تعقيدها يمثل مصدر إزعاج شائع للعديد من المطورين ذوي الخبرة. لكن مهلا ، أشعر بالمغامرة وأنا أكتب هذا ، وأحب أن أتحدى نفسي لفهم regex بقدر أكبر كلما أمكن ذلك. يفسح تحدي البرمجة النصية للخوارزمية نفسه جيدًا للتعبير العادي ، لذلك دعونا نلقي نظرة عليه ونرى ما إذا كان بإمكاننا زيادة فهمنا للتعبير العادي!

بيداك

فهم المشكلة : لدينا مدخل واحد ، سلسلة. ناتجنا هو أيضا سلسلة. في النهاية ، نريد إرجاع سلسلة الإدخال بالحرف الأول - والحرف الأول فقط - من كل كلمة بأحرف كبيرة.

أمثلة / حالات الاختبار : توضح حالات الاختبار المقدمة لدينا أنه يجب أن يكون لدينا حرف كبير فقط في بداية كل كلمة. نحن بحاجة إلى تقليل الأحرف الباقية. تُظهر حالات الاختبار المقدمة أيضًا أننا لا نلقي بأي كرات منحنية من حيث الكلمات المركبة الغريبة المفصولة برموز بدلاً من المسافات البيضاء. هذه أخبار جيدة لنا!

بنية البيانات : لن نحول السلسلة إلى مصفوفة أثناء استخدام التعبيرات العادية. تحتوي JavaScript على طريقة .replace()رائعة تسمح لنا باستهداف أي شيء نريده في سلسلة نصية واستبدالها بشيء آخر. نستخدم التعبيرات النمطية لاستهداف ما نريد استبداله.

هناك العديد من الرموز المستخدمة في التعبيرات النمطية التي لا أتمنى أن أعطي نظرة عامة عنها هنا. يمكنني توجيهك نحو ورقة الغش هذه ، والتي أستخدمها عندما يتعين علي استخدام regex.

ما يمكنني فعله هو إخبارك أن regex .replace()في JavaScript يتبع نمطًا أساسيًا. .replace()يأخذ وسيطتين: نمط (عادة تعبير عادي) واستبدال (يمكن أن يكون سلسلة أو وظيفة).

string.replace(regex, function)

في حلنا ، سنستبدل الحرف الموجود في بداية كل كلمة. كيف نحصل على regex للقيام بذلك لنا؟ نقول .replace()لمطابقة أي حرف يتبع مسافة بيضاء أو مطابقة الحرف الأول من السلسلة بأكملها (لأن الكلمة الأولى من السلسلة لا تحتوي على مسافة بيضاء قبلها).

دعنا نكسر جزء regex من الحل. للقيام بذلك ، دعنا ننظر إلى الوسيطة الأولى .replace()للدالة. هذا هو رمز regex الذي يحدد النمط الذي نتطلع إلى مطابقته واستبداله.

// full solution:
function titleCase(str)  return str.toLowerCase().replace(/(^

نريد في النهاية العثور على جميع الأحرف التي لا تحتوي على مسافات بيضاء ، والتي يتم تمثيلها بواسطة \S.

ثم نريد تحديد رغبتنا في مطابقة تلك الأحرف التي ليست مسافات بيضاء في بداية سلسلة ^أو |بعد أي حرف مسافة بيضاء \s.

نضيف المُعدِّل العام gللبحث عن كل هذه الأنماط واستبدالها في السلسلة بأكملها.

الخوارزمية :

  1. تحويل جميع الأحرف strإلى أحرف صغيرة.
  2. استبدل الحرف الأول من كل كلمة في السلسلة بالحرف الكبير.
  3. إعادة سلسلة العنوان المغلفة.

الكود : انظر أدناه!

إذا كانت لديك حلول و / أو اقتراحات أخرى ، فيرجى المشاركة في التعليقات!

هذه المقالة هي جزء من سلسلة freeCodeCamp Algorithm Scripting.

تشير هذه المقالة إلى البرمجة النصية لخوارزمية freeCodeCamp الأساسية: حالة العنوان أ جملة

يمكنك متابعتي على Medium و LinkedIn و GitHub!