ابراهيم الخليل سماني نشر 29 أبريل 2021 أرسل تقرير نشر 29 أبريل 2021 ممكن احد يشرح لي السطر هذا : [array[i], array[j]] = [array[j], array[i]]; let array = [1, 2, 3, 4, 5]; function shuffle(array) { for (let i = array.length - 1; i > 0; i--) { let j = Math.floor(Math.random() * (i + 1)); [array[i], array[j]] = [array[j], array[i]]; } } 1 اقتباس
1 Wael Aljamal نشر 29 أبريل 2021 أرسل تقرير نشر 29 أبريل 2021 الشكل المبسط لشيفرة تبديل قيمة عنصرين في جافاسكربت بالشكل التالي: let a = 1; let b = 2; [a, b] = [b, a]; // [a, b] = [2, 1] // النتيجة a; // => 2 b; // => 1 هي بسيطة فقط عليك تعويض القيم، بالنسبة لدليل المصفوفة i - j فهو ثابت لا تتغير قيمته في الشيفرة لديك: let array = [1, 2, 3, 4, 5]; [array[i], array[j]] = [array[j], array[i]]; لنستبدل أول قيمتين: let array = [1, 2, 3, 4, 5]; let i = 0; let j = 1; [array[i], array[j]] = [array[j], array[i]]; => [array[0], array[1]] = [array[1], array[0]]; => [array[0], array[1]] = [2, 1]; => array[0] => 2 array[1] => 1 وهكذا يتم تبديل القيمتين بين عنصرين في مصفوفة. دليل العنصر ثابت إنما قيمة العنصر ذو الدليل X هي التي تتغير. بالنسبة للشيفرة بشكل عام تقوم بخلط عناصر المصفوفة من خلال تبديل العنصر i مع عنصر آخر ذو دليل عشوائي j 2 اقتباس
1 سامح أشرف نشر 29 أبريل 2021 أرسل تقرير نشر 29 أبريل 2021 يقوم هذا السطر بتبديل قيمة عنصرين معًا، فمثلًا إن كان لدينا المصفوفة التالية: let array = [1, 2, 3, 4, 5]; وقمنا بتنفيذ السطر التالي: // يقوم السطر التالي بتبديل قيمة أول عنصرين في المصفوفة [array[0], array[1]] = [array[1], array[0]] console.log(array) // Output: [2, 1, 3, 4, 5] وفي الدالة التي أرفقتها في الأعلى (shuffle) يتم إستعمال هذه الطريقة لخلط العناصر في المصفوفة بطريقة عشوائية 1 اقتباس
1 بلال زيادة نشر 29 أبريل 2021 أرسل تقرير نشر 29 أبريل 2021 [array[i], array[j]] = [array[j], array[i]]; ES6 الجديد يسمح بتعيين متغيرين في وقت واحد. يكون هذا مفيدًا بشكل خاص عندما نريد تبديل قيم متغيرين , حيث يمكننا القيام بذلك في سطر واحد من التعليمات البرمجية. 1 اقتباس
1 سامح أشرف نشر 29 أبريل 2021 أرسل تقرير نشر 29 أبريل 2021 بتاريخ 2 دقائق مضت قال Brahim Semmani: فهمت ذالك لكن ليس بنسبة 100% فالعملية تتم في حلقة تنازلية i-- , و j رقم عشوائي من 0 حتى 4 والتساؤلات مطروحة عندي ؟؟ كيف تتم العملية بدون تكرار .. شرط التكرار هو أن يكون المتغير i أكبر من صفر (i > 0)، وبما أن المتغير تبدأ قيمته من 4 (طول المصفوفة - 1) فستكون قيمة هذا المتغير 4 ثم في الدورة الثانية ستكون قيمته 3 ثم 2 في التي تليها ثم 1 في آخر دورة تكرار. (4 - 3 - 2 - 1) ثم في السطر المسئول عن إسناد قيمة للمتغير j : // قيمة عشوائية ما بين 0 و 4 let j = Math.floor(Math.random() * (i + 1)); أي أن قيمة المتغير j ستكون ما بين 0 و 4 في أول دورة، وستكون قيمته ما بين 0 و 3 في ثاني دورة وهكذا. ( [0:4] - [0:3] - [0:2] - [0:1] ) ثم في السطر التالي يتم تبديل قيمة العنصر ذي الفهرس 4 index مع عنصر آخر مختار بطريقة عشوائية: // في الدورة الأولى // i = 4 // j = رقم عشوائي من 0 إلى 4 // أي سيتم تبديل العنصر 4 بأحد العناصر الأخرى في المصفوفة [array[i], array[j]] = [array[j], array[i]]; يتم نفس الأمر في الدورة الثانية مع العنصر 3 (أي يتم تبديله مع أحد العناصر الأخرى) وهكذا إلى أن تنتهي آخر دورة. 1 اقتباس
1 سامح أشرف نشر 29 أبريل 2021 أرسل تقرير نشر 29 أبريل 2021 بتاريخ الآن قال Brahim Semmani: والعنصر j الا يتم تبديله بالعنصر i؟ يتم تبديله بالطبع، لكن هذا الأمر لن يؤثر على أي شيء لأن المتغير j يتم إسناد قمية عشوائية جديدة في كل دورة. 1 اقتباس
0 ابراهيم الخليل سماني نشر 29 أبريل 2021 الكاتب أرسل تقرير نشر 29 أبريل 2021 بتاريخ 3 دقائق مضت قال سامح أشرف: يقوم هذا السطر بتبديل قيمة عنصرين معًا، فمثلًا إن كان لدينا المصفوفة التالية: let array = [1, 2, 3, 4, 5]; وقمنا بتنفيذ السطر التالي: // يقوم السطر التالي بتبديل قيمة أول عنصرين في المصفوفة [array[0], array[1]] = [array[1], array[0]] console.log(array) // Output: [2, 1, 3, 4, 5] وفي الدالة التي أرفقتها في الأعلى (shuffle) يتم إستعمال هذه الطريقة لخلط العناصر في المصفوفة بطريقة عشوائية فهمت ذالك لكن ليس بنسبة 100% فالعملية تتم في حلقة تنازلية i-- , و j رقم عشوائي من 0 حتى 4 والتساؤلات مطروحة عندي ؟؟ كيف تتم العملية بدون تكرار .. 1 اقتباس
0 ابراهيم الخليل سماني نشر 29 أبريل 2021 الكاتب أرسل تقرير نشر 29 أبريل 2021 بتاريخ 5 دقائق مضت قال سامح أشرف: // في الدورة الأولى // i = 4 // j = رقم عشوائي من 0 إلى 4 // أي سيتم تبديل العنصر 4 بأحد العناصر الأخرى في المصفوفة [array[i], array[j]] = [array[j], array[i]]; والعنصر j الا يتم تبديله بالعنصر i؟ اقتباس
السؤال
ابراهيم الخليل سماني
ممكن احد يشرح لي السطر هذا :
7 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.