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

how to remove an array element using splice in javascript

السؤال

نشر

في الكود التالي أريد محو جميع الأرقام لكن يظهر الرقم 2 في النتيجة

let mix = [1, 2, 3, "M", 4, "o", "h", "a", "m", 5, "d",6,"d"];

mix.map((el)=>{
    // console.log(mix.indexOf(el))
    isNaN(el) ? el : mix.splice(mix.indexOf(el), 1)
})
console.log(mix)

//output:
[ 2, 'M', 'o', 'h', 'a', 'm', 'd', 'd' ]

بالرغم أنه في الشيفرة التالية يقع محو 2 من array

let el = 2
mix.splice(mix.indexOf(el), 1)


//the output:
[ 1, 3, 'M', 4, 'o', 'h', 'a', 'm', 5, 'd', 6, 'd' ]

 

Recommended Posts

  • 0
نشر

جرب استخدام الـ filter فهو أفضل وهو الطريقة المثالية لتحقيق النتيجة التي تريدها :

let mix = [1, 2, 3, "M", 4, "o", "h", "a", "m", 5, "d",6,"d"];
const filterd = mix.filter(ele =>  isNaN(ele));
console.log(filterd);

اعرف أكثر عن الوظيفة filter من حسوب.

والخطأ يحصل لديك لأنك تقوم بتعديل العنصر الأساسي mix أثناء عمل الـ map وبالتالي يتغير ترتيب العناصر أثناء تنفيذ الحلقة map.

  • 0
نشر
بتاريخ 36 دقائق مضت قال عمر قره محمد:

جرب استخدام الـ filter فهو أفضل وهو الطريقة المثالية لتحقيق النتيجة التي تريدها :


let mix = [1, 2, 3, "M", 4, "o", "h", "a", "m", 5, "d",6,"d"];
const filterd = mix.filter(ele =>  isNaN(ele));
console.log(filterd);

اعرف أكثر عن الوظيفة filter من حسوب.

والخطأ يحصل لديك لأنك تقوم بتعديل العنصر الأساسي mix أثناء عمل الـ map وبالتالي يتغير ترتيب العناصر أثناء تنفيذ الحلقة map.

شكرا لكن نسيت بأن أقول أن الهدف هو إيجاد حل دون filter 

  • 0
نشر (معدل)

إذا أردت استعمال وظيفة SPLICE يمكنك استعمال حلقة WHILE و لكن بداية من آخر عنصر:

let mix = [1, 2, 3, "M", 4, "o", "h", "a", "m", 5, "d",6,"d"];

i = mix.length; // نـأخذ طول اللائحة

while (i--) { // حلقة تبدأ من العنصر الأخير إلى العنصر اﻷول
    if (!isNaN(mix[i])) mix.splice(i, 1); // اذا كان العنصر رقما نحذفه انطلاقا من مؤشره
}

console.log(mix); // طباعة اللائحة

يمكنك ملاحظة الفرق باستعمال تقنية الحلقة العكسية التي قمنا بها بحيث المخرج هو:

[ 'M', 'o', 'h', 'a', 'm', 'd', 'd' ]

للتعرف أكثر على SPLICE التي تحذف عنصر انطلاقا من مؤشره من هنا

تم التعديل في بواسطة Ayoub Souad
  • 0
نشر
بتاريخ 2 ساعات قال محمود سعداوي:

شكرا لكن نسيت بأن أقول أن الهدف هو إيجاد حل دون filter 

إذا كان الهدف هو تنقية عناصر المصفوفة من الأرقام بدون إستخدام filter فإنك بهذه الحالة لا تحتاج إستخدام splice وإنما يمكنك إستخدام forEach مثلا (أو for) للمرور على جميع عناصر المصفوفة ومن خلال تحقيق شرط نوع العنصر تستطيع دفع جميع العناصر التي لا يكون نوعها number إلى مصفوفة جديدة وكما يلي 

	...
	let filtered= [] // ننشيء مصفوفة فارغة
	mix.forEach((el, i)=>{ // المرور على جميع عناصر المصفوفة
	 
	    if(typeof el !=="number"){ // نتحقق من نوع العنصر
	        filtered.push(el) // نضعه في المصفوفة سابقة التعريف
	    }
	})
	 
	console.log(filtered)
	

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...