Mohammed Ahmed19 نشر 4 يوليو 2021 أرسل تقرير نشر 4 يوليو 2021 السلام عليكم ورحمة الله لدي سؤال حول كيفية عمل الدالة داخل الـsort method في هذا الكود let numbers =[2, 14, 1, 2, 5]; number.sort((x,y) => y - x); 1 اقتباس
2 عبدالله عبدالرحمن11 نشر 4 يوليو 2021 أرسل تقرير نشر 4 يوليو 2021 بتاريخ 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); 2 اقتباس
1 محمد أيت لعرايك نشر 4 يوليو 2021 أرسل تقرير نشر 4 يوليو 2021 تسمح لك الدالة ()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 وتترك مواقعها دون تغيير. بإختصار عند كل دورة تأخد الدالة عددين من المصفوفة, العدد الأول مع العدد اللذي بجانيه وتقارن بينهما ثم تغير مركزهما حسب الأمر الموجود في الدالة. 1 اقتباس
1 عبدالله عبدالرحمن11 نشر 6 يوليو 2021 أرسل تقرير نشر 6 يوليو 2021 بتاريخ 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 وهكذا لبقية العناصر 1 اقتباس
0 محمد أبو عواد نشر 4 يوليو 2021 أرسل تقرير نشر 4 يوليو 2021 الدالة 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 اقتباس
0 Mohammed Ahmed19 نشر 4 يوليو 2021 الكاتب أرسل تقرير نشر 4 يوليو 2021 (معدل) شكرا لك اخ محمد لكن هل من الممكن ان تشرح لي الطريقة بالتفصيل كيف يعمل هذا الكود ؟ تم التعديل في 4 يوليو 2021 بواسطة Mohammed Ahmed19 1 اقتباس
0 Mohammed Ahmed19 نشر 5 يوليو 2021 الكاتب أرسل تقرير نشر 5 يوليو 2021 بتاريخ 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 بأنهم عناصر ؟ اقتباس
0 Mohammed Ahmed19 نشر 6 يوليو 2021 الكاتب أرسل تقرير نشر 6 يوليو 2021 بتاريخ 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 وهكذا لبقية العناصر شكرا لك اخ عبد المجيد على التوضيح اقتباس
السؤال
Mohammed Ahmed19
السلام عليكم ورحمة الله لدي سؤال حول كيفية عمل الدالة داخل الـsort method في هذا الكود
7 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.