Emad Saif نشر 2 سبتمبر 2022 أرسل تقرير نشر 2 سبتمبر 2022 لدي مصفوفة كبيرة للغاية تحتوي على عشرات الأرقام: const myArr = [123, 456, 789, 102, ...]; وأريد أن أقوم بإسبدال كل العنصر الذي يساوي 102 على سبيل المثال، فكرت في عمل دالة تقوم بالمرور على عنصر من عناصر المصفوفة وتتحقق من قيمته وتستبدله. ولكن ألا يوجد دالة مثل String.replace للتعامل مع المصفوفات تسهل هذا الأمر؟ أو هل توجد طريقة أسهل من المرور على كل عنصر يدويًا؟ 2 اقتباس
1 Hassan Hedr نشر 2 سبتمبر 2022 أرسل تقرير نشر 2 سبتمبر 2022 في حال كانت عملية التبديل متعلقة بقيمة العنصر، فيجب المرور على كل عناصر المصفوفة لفحصها وتبديل القيم المطلوبة بالقيم الجديدة، بدلًا من المرور على العناصر باستخدام الحلقات مثل for و foreach يمكن االاستفادة من التابع map الذي توفره المصفوفات، حيث تمرر له تابعًا سيستدعى لكل عنصر من عناصر المصفوفة وستحسب داخلة القيمة الجديدة لذلك العنصر، مثلًا في حال أردت تبديل القيم 102 بالقيمة 555 تكون الشيفرة كالتالي: myArr.map(function (item){ if(item === 102) return 555; // تبديل بقيمة مختلفة return item; // إرجاع القيمة نفسها }) اقتباس
2 علي عبد محسن نشر 2 سبتمبر 2022 أرسل تقرير نشر 2 سبتمبر 2022 (معدل) لا توجد طريقة مباشرة 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] لاحظ أن الدالة تعدل على المصفوفة الأصلية ولا تعيد مصفوفة جديدة. تم التعديل في 2 سبتمبر 2022 بواسطة علي محسن اقتباس
1 Wael Aljamal نشر 2 سبتمبر 2022 أرسل تقرير نشر 2 سبتمبر 2022 يمكنك المرور على المصفوفة بحلقة 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 سيتم تشكيل مصفوفة جديدة أما هذه الطريقة تعدل على المصفوفة الأصلية اقتباس
0 علي عبد محسن نشر 3 سبتمبر 2022 أرسل تقرير نشر 3 سبتمبر 2022 (معدل) تصحيح: بالخطأ كتبنا replacementCoun في parameters الدالة والصحيح هو replacementCount. تم التعديل في 3 سبتمبر 2022 بواسطة علي محسن اقتباس
السؤال
Emad Saif
لدي مصفوفة كبيرة للغاية تحتوي على عشرات الأرقام:
وأريد أن أقوم بإسبدال كل العنصر الذي يساوي 102 على سبيل المثال، فكرت في عمل دالة تقوم بالمرور على عنصر من عناصر المصفوفة وتتحقق من قيمته وتستبدله.
ولكن ألا يوجد دالة مثل String.replace للتعامل مع المصفوفات تسهل هذا الأمر؟ أو هل توجد طريقة أسهل من المرور على كل عنصر يدويًا؟
4 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.