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

السؤال

نشر

لدي مصفوفة كبيرة للغاية تحتوي على عشرات الأرقام:

const myArr = [123, 456, 789, 102, ...];

وأريد أن أقوم بإسبدال كل العنصر الذي يساوي 102 على سبيل المثال، فكرت في عمل دالة تقوم بالمرور على عنصر من عناصر المصفوفة وتتحقق من قيمته وتستبدله.

ولكن ألا يوجد دالة مثل String.replace للتعامل مع المصفوفات تسهل هذا الأمر؟ أو هل توجد طريقة أسهل من المرور على كل عنصر يدويًا؟

Recommended Posts

  • 1
نشر

في حال كانت عملية التبديل متعلقة بقيمة العنصر، فيجب المرور على كل عناصر المصفوفة لفحصها وتبديل القيم المطلوبة بالقيم الجديدة، بدلًا من المرور على العناصر باستخدام الحلقات مثل for و foreach يمكن االاستفادة من التابع map الذي توفره المصفوفات، حيث تمرر له تابعًا سيستدعى لكل عنصر من عناصر المصفوفة وستحسب داخلة القيمة الجديدة لذلك العنصر، مثلًا في حال أردت تبديل القيم 102 بالقيمة 555 تكون الشيفرة كالتالي:

myArr.map(function (item){
  if(item === 102)
    return 555; // تبديل بقيمة مختلفة
  
  return item; // إرجاع القيمة نفسها
})

 

  • 2
نشر (معدل)

لا توجد طريقة مباشرة  built-in لأستبدال عناصر المصفوفة في javascript. ما يجدر الأشاره له هو أن المصفوفات قد تحتوي أنواع مختلفة من البيانات dataTypes مما يجعل وضع حلاً موحداً لكل الإحتمالات شيء بالغ التعقيد. لحسن الحظ يمكنك تعريف دالتك لخاصة للنوع Array وتشغيلها بالطريقة ذاتها التي تستدعي بها الدوال مسبقة التعريف لصنف ما.
في حالة المصفوفة التي تحتوي على عناصر من نوع Number يمكنك الأستعانة بالدالة أدناه كأحد الحلول نظراً لوجود أكثر من طريقة للوصول إلى النتيجة ذاتها.

Array.prototype.replaceInPlace= function (
    target, //  العنصر المستهدف
    replacement, // قيمة الإبدال
    replacementCoun // عدد مرات الإستبدال
) {
    let replaced= 0 // عدد مرات الإستبدال المنفذة
    for (let index = 0; index < this.length; index++) { // المرور على جميع عناصر المصفوفة
        
      if (this[index] === target ) { // محاولة العثور على القيمة المستهدفة
          this[index] = replacement; // إستبدال العنصر المستهدف
          replaced++  // تعديل عدد مرات الإستبدال المنفذة
      }
	    
      if(replacementCount && (replaced === replacementCount) ) { 
          break // إيقاف الإستبدال عند الوصول الى عدد العناصر المحدد المراد إستبدالها
      }  //  إذا لم يتم تعيين replacementCount سوف تستمر الدالة بالبحث..
    }
      
}

let arr = [1, 2, 3, 4, 5, 4, 6, 7, 8, 9];
arr.replaceInPlace(4, 999)  // إستدعاء الدالة 
console.log( arr ) // => [1, 2, 3, 999, 5, 999, 6, 7, 8, 9]
	

لاحظ أن الدالة تعدل على المصفوفة الأصلية ولا تعيد مصفوفة جديدة.

تم التعديل في بواسطة علي محسن
  • 1
نشر

يمكنك المرور على المصفوفة بحلقة forEach حيث يتم تمرير وسيط ثاني هو ترقيم العنصر الحالي، يمكنك اختبار قيمته ومن ثم عمل التعديل الذي يناسبك

var arr = [1,2,3,4,4,4,4,4,5];

arr.forEach(function(element, index) {
 if (arr[index] == 4)
         arr[index] = 6
});


console.log(arr)

ملاحظة: عند استخدام map سيتم تشكيل مصفوفة جديدة أما هذه الطريقة تعدل على المصفوفة الأصلية

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...