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

السؤال

Recommended Posts

  • 0
نشر

الدالة sort نستطيع من خلالها تمرير function لديها معاملات واجراء بعض الشروط على المعاملات وعلى أساس ذلك يمكن ترتيب العناصر, الكود الذي في الأعلى هو اختصارا لهذا الكود

numbers =[2, 14, 1, 2, 5];
numbers.sort( function( a , b){
    if(a < b) return 1;
    if(a > b) return -1;
    return 0;
});

اذا كان المعامل الاول أصغر من المعامل الثاني قم بارجاع القيمة 1 وهي تعني ان قم بعملية الترتيب والعكس صحيح, يمكنك تجربة الكود الكود المرفق مع الكود الذي ارفقته أنت لترى النتائج

  • 1
نشر

تسمح لك الدالة ()sort بترتيب عناصر المصفوفة في مكانها. بالإضافة إلى إعادة المصفوفة التي تم ترتيبها ،  الدالة ()sort أيضا تغير مواضع العناصر في المصفوفة الأصلية.

بشكل افتراضي ، تقوم الدالة ()sort بفرز عناصر المصفوفة بترتيب تصاعدي من الأصغر إلى الأكبر.

في حالة إستعمال الدالة بشكل إفتراضي:

let numbers = [0, 1 , 2, 3, 10, 20, 30 ];
numbers.sort();
console.log(numbers);


// النتيجة
// [ 0, 1, 10, 2, 20, 3, 30 ]

في حالة تم تمرير دالة المقارنة الخاصة بطريقة الفرز التي تقبل عاملين وترجع قيمة تحدد ترتيب الفرز. فالنتيجة تكون على حسب طريقة الفرز في الدالة الممررة.

يوضح ما يلي كيفية إستعمال دالة المقارنة:

let numbers = [0, 1 , 2, 3, 10, 20, 30 ];
numbers.sort( function( a , b){
    if(a > b) return 1;  // نرجع عدد موجب 
    if(a < b) return -1; // نرجع عدد سالب
    return 0; // نرجع 0
});

عند كل دورة تقوم الدالة ()sort بمقارنة زوجين من المصفوفة 0 و 1 ثم 1 و 2  ثم 2 و 3 و هذا ...

في حالة تم إسترجاع عدد موجب من دالة المقارنة تضع العدد b في رتبة أقل من a

وفي حالة تم إسترجاع عدد سالب فإن دالة المقارنة تضع العدد b في رتبة أكبر من a

أما في حالة إسترجاع  0 فتعتبر a يساوي b وتترك مواقعها دون تغيير.

بإختصار عند كل دورة تأخد الدالة عددين من المصفوفة, العدد الأول مع العدد اللذي بجانيه وتقارن بينهما ثم تغير مركزهما حسب الأمر الموجود في الدالة.

 

 

  • 2
نشر
بتاريخ 9 ساعات قال Mohammed Ahmed19:

شكرا لك اخ محمد لكن هل من الممكن ان تشرح لي الطريقة بالتفصيل كيف يعمل هذا الكود ؟

تقوم دالة sort() بفرز عناصر المصفوفة في مكانها وإرجاع المصفوفة التي تم فرزها. 

ترتيب الفرز الافتراضي تصاعدي ، مبني على تحويل العناصر إلى سلاسل ، ثم مقارنة تسلسل قيم وحدات رمز UTF-16.

حيث أي عنصر في المصفوفة يتم تحويله الى نص ، على سبيل المثال إذا كان العنصر رقم فيتم تحويله الى سلسلة نصية string ومن ثم يتم مقارنة السلاسل النصية وفقاً لقيمها في نظام UTF-16 . هذه هي الحالة الإفتراضية لدالة sort أي إذا لم تقم بتمرير دالة مقارنة إليها ، على سبيل المثال

let arr = [4,30,100,1]

arr.sort()
// [1, 100, 30, 4]
/*
 * تم ترتيب العناصر على أنها سلاسل نصية ووفقاً لقيمها في نظام
 * UTF-16
*/

أما إذا قمت بتمرير دالة مقارنة إليها فيتم ترتيب العناصر بناءً على دالة المقارنة ولايتم الترتيب الافتراضي بتحويل العناصر الى سلاسل نصية string ، كما في الكود الخاص بك

let numbers =[2, 14, 1, 2, 5];
/* دالة المقارنة تقوم بمقارنة عنصرين متجاورين حيث المتغير
 * x
 * هو المتغير الأول والمتغير
 * y
 * هو المتغير التالي المجاور للمتغير
 * x
 * ويتم إرجاع المتغير الأكبر
*/

number.sort((x,y) => y - x);

 

  • 0
نشر
بتاريخ 15 ساعات قال عبدالمجيد الجرادي:

تقوم دالة sort() بفرز عناصر المصفوفة في مكانها وإرجاع المصفوفة التي تم فرزها. 

ترتيب الفرز الافتراضي تصاعدي ، مبني على تحويل العناصر إلى سلاسل ، ثم مقارنة تسلسل قيم وحدات رمز UTF-16.

حيث أي عنصر في المصفوفة يتم تحويله الى نص ، على سبيل المثال إذا كان العنصر رقم فيتم تحويله الى سلسلة نصية string ومن ثم يتم مقارنة السلاسل النصية وفقاً لقيمها في نظام UTF-16 . هذه هي الحالة الإفتراضية لدالة sort أي إذا لم تقم بتمرير دالة مقارنة إليها ، على سبيل المثال


let arr = [4,30,100,1]

arr.sort()
// [1, 100, 30, 4]
/*
 * تم ترتيب العناصر على أنها سلاسل نصية ووفقاً لقيمها في نظام
 * UTF-16
*/

أما إذا قمت بتمرير دالة مقارنة إليها فيتم ترتيب العناصر بناءً على دالة المقارنة ولايتم الترتيب الافتراضي بتحويل العناصر الى سلاسل نصية string ، كما في الكود الخاص بك


let numbers =[2, 14, 1, 2, 5];
/* دالة المقارنة تقوم بمقارنة عنصرين متجاورين حيث المتغير
 * x
 * هو المتغير الأول والمتغير
 * y
 * هو المتغير التالي المجاور للمتغير
 * x
 * ويتم إرجاع المتغير الأكبر
*/

number.sort((x,y) => y - x);

 

ولكن كيف دالة sort تتعرف على x , y  بأنهم عناصر ؟

  • 1
نشر
بتاريخ On 7/5/2021 at 10:07 قال Mohammed Ahmed19:

ولكن كيف دالة sort تتعرف على x , y  بأنهم عناصر ؟

إذا لم تقم بإضافة أي شيء فسيتم الفرز بالطريقة الإفتراضية الذي شرحتها مسبقاً.

أما إذا قمت بإضافة دالة حيث شكل الدالة ليس عشوائياً حيث أن دالة sort تتوقع أن تكون الدالة بهذا الشكل كما في التوثيق الرسمي

/* الدالة تتوقع أن تكون الدالة بهذا الشكل بحث تحتوي على مُدخلين 
 * وإرجاع قيمة إما أكبر من الصفر أو أصغر من أو يساوي الصفر
*/
(x,y) => { 
  // ضع الكود الذي تريد ومن ثم قم بإعادة قيمة 
}

حيث أنها تتوقع أن يكون للدالة مُدخلين وضع لهما أي اسم فليس هناك مشكلة وهنا وضعنا x و y ولا مشكلة بتغييرهما حيث أن دالة sort تتوقع أن تكون الدالة الذي ستمررها لها يجب أي يكون لها مُدخلين.

ومن ثم دالة sort عند الفرز تقوم بتحديد العنصر الأول من المصفوفة والعنصر المجاور من المصفوفة ومن ثم تقوم بتمرير هذين العنصرين مكان x و y حيث مكان x سيوضع فيه قيمة العنصر الأول ومكان y سيوضع فيه مكان العنصر المجاور ومن ثم هذه الدالة التي مررناها ستقوم بإرجاع قيمة معينة

  • حيث إذا كانت القيمة المُرجعة أكبر من الصفر فسيتم فرز y قبل x
  • اما إذا كانت القيمة المُرجعة أصغر من أو يساوي الصفر فسيبقى العنصرين x و y كما هما

حيث في دالة المقارنة التي وضعناها قمنا بكتابة y - x حيث على سبيل المثال يكون العنصر y يساوي 4 والعنصر x يساوي 2 إذن ستكون 2 - 4 والناتج سيكون 2 وهو أكبر من الصفر ، إذن سيتم فرز y أي 2 قبل x أي 4 وهكذا لبقية العناصر

  • 0
نشر
بتاريخ 3 ساعات قال عبدالمجيد الجرادي:

إذا لم تقم بإضافة أي شيء فسيتم الفرز بالطريقة الإفتراضية الذي شرحتها مسبقاً.

أما إذا قمت بإضافة دالة حيث شكل الدالة ليس عشوائياً حيث أن دالة sort تتوقع أن تكون الدالة بهذا الشكل كما في التوثيق الرسمي


/* الدالة تتوقع أن تكون الدالة بهذا الشكل بحث تحتوي على مُدخلين 
 * وإرجاع قيمة إما أكبر من الصفر أو أصغر من أو يساوي الصفر
*/
(x,y) => { 
  // ضع الكود الذي تريد ومن ثم قم بإعادة قيمة 
}

حيث أنها تتوقع أن يكون للدالة مُدخلين وضع لهما أي اسم فليس هناك مشكلة وهنا وضعنا x و y ولا مشكلة بتغييرهما حيث أن دالة sort تتوقع أن تكون الدالة الذي ستمررها لها يجب أي يكون لها مُدخلين.

ومن ثم دالة sort عند الفرز تقوم بتحديد العنصر الأول من المصفوفة والعنصر المجاور من المصفوفة ومن ثم تقوم بتمرير هذين العنصرين مكان x و y حيث مكان x سيوضع فيه قيمة العنصر الأول ومكان y سيوضع فيه مكان العنصر المجاور ومن ثم هذه الدالة التي مررناها ستقوم بإرجاع قيمة معينة

  • حيث إذا كانت القيمة المُرجعة أكبر من الصفر فسيتم فرز y قبل x
  • اما إذا كانت القيمة المُرجعة أصغر من أو يساوي الصفر فسيبقى العنصرين x و y كما هما

حيث في دالة المقارنة التي وضعناها قمنا بكتابة y - x حيث على سبيل المثال يكون العنصر y يساوي 4 والعنصر x يساوي 2 إذن ستكون 2 - 4 والناتج سيكون 2 وهو أكبر من الصفر ، إذن سيتم فرز y أي 2 قبل x أي 4 وهكذا لبقية العناصر

شكرا لك اخ عبد المجيد على التوضيح

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...