اذهب إلى المحتوى

السؤال

نشر

سلام عليكم.

في الكود البرمجي التالي: الذي تمرر له نص و يمر علي كل الحروف في النص و يكررها أي اذا أدخلت له 'text' ستكون 'tteexxtt' أو 'hello' ستكون 'hheelllloo'.


// Double String :: string >> ssttrriinngg 

let txt = "hello";
let txtAfter = '';

for(let item of txt){
    for(let i=0; i<2; i++)
        txtAfter+=item;
}

console.log(txtAfter);

يمكن حل المسئله بطريقه اخري: اذ يمكن المرور علي كل العناصر و نسخها.

let txt = 'hello';

for(let i of txt){
    txt.splice(i, 0, txt[i]);
}

لكن splice لا تعمل مع النصوص. هل هناك بديل؟

Recommended Posts

  • 0
نشر

وعليكم السلام ورحمة الله وبركاته.

نعم بالفعل يوجد الكثير من الحلول الأخرى بدلا من إستخدام splice مع النصوص وذلك لأن النصوص (strings) غير قابلة للتغيير (immutable) ولا تحتوي على دالة splice كما في المصفوفات.

ويوجد حل وذلك من خلال أولا تحويل النص إلى مصفوفة (array) من خلال إستخدام split وبعد ذلك يمكنك استخدام splice وأخيرا تحويل المصفوفة مرة أخرى إلى نص.هكذا :

let txt = 'hello';
let txt_arr = txt.split(''); // تحويل النص إلى مصفوفة من خلال تفكيك الأحرف إلى عناصر في المصفوفة

for (let i = 0; i < txt_arr.length; i += 2) { // التكرار على طول المصفوفة ولكن قمنا بزيادة العداد بمقدار 2 لأنه يتم إضافة عنصر جديد 
    txt_arr.splice(i, 0, txt_arr[i]); // إضافة الحرف مرة أخرى في الموضع الحالي
}

let new_txt = txt_arr.join(''); // تحويل المصفوفة إلى نص
console.log(new_txt); // "hheelllloo"

حيث أولا إستخدمنا txt.split('') لتحويل النص إلى مصفوفة من الحروف.

ومن ثم نستخدم حلقة for للتكرار خلال المصفوفة مع زيادة الفهرس بمقدار 2 في كل خطوة لأننا نضيف حرف جديد في كل مرة.

وأخيرا نقوم بإستخدام join('') لتجميع عناصر المصفوفة إلى نص مرة أخرى.

  • 0
نشر

الكود الثاني الذي قدمته يحاول استخدام splice على نص (string)، لكن splice هي دالة خاصة بالمصفوفات (arrays) في JavaScript وليست بالنصوص. النصوص في JavaScript غير قابلة للتعديل (immutable)، لذا لا يمكن استخدام دوال مثل splice عليها مباشرة. ومع ذلك، يمكن تحقيق الهدف بطرق أخرى لتكرار الحروف في النص.

الحلول البديلة:

تحويل النص إلى مصفوفة ثم استخدام splice

يمكنك تحويل النص إلى مصفوفة من الحروف باستخدام split('')، ثم استخدام splice لإدراج الحروف، وأخيرًا إعادة تحويل المصفوفة إلى نص باستخدام join(''). لكن هذا قد يكون معقدًا قليلاً لهذا الهدف، لأنك ستحتاج إلى تعديل المؤشر أثناء الإدراج.

بدلاً من ذلك، إليك طريقة أبسط باستخدام مصفوفة:

let txt = 'hello';
let txtArray = txt.split(''); // تحويل النص إلى مصفوفة
let result = [];

for (let i = 0; i < txtArray.length; i++) {
    result.push(txtArray[i], txtArray[i]); // إضافة كل حرف مرتين
}

let txtAfter = result.join(''); // تحويل المصفوفة إلى نص
console.log(txtAfter); // الناتج: hheelllloo

استخدام map أو reduce 

يمكن استخدام دوال JavaScript الوظيفية مثل map لتبسيط العملية:

let txt = 'hello';
let txtAfter = txt.split('').map(char => char + char).join('');
console.log(txtAfter); // الناتج: hheelllloo
  • txt.split(''): يحول النص إلى مصفوفة من الحروف.
  • map(char => char + char): يكرر كل حرف بإضافته مرة أخرى.
  • join(''): يحول المصفوفة إلى نص مرة أخرى.

استخدام repeat

JavaScript توفر دالة repeat التي تتيح تكرار سلسلة معينة. يمكن استخدامها مع map أو مباشرة:

let txt = 'hello';
let txtAfter = txt.split('').map(char => char.repeat(2)).join('');
console.log(txtAfter); // الناتج: hheelllloo

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...