• 0

ترتيب المصفوفة في جافاسكريبت

ممكن احد يشرح لي السطر هذا :

[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

الشكل المبسط لشيفرة تبديل قيمة عنصرين في جافاسكربت بالشكل التالي:

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

يقوم هذا السطر بتبديل قيمة عنصرين معًا، فمثلًا إن كان لدينا المصفوفة التالية:

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
[array[i], array[j]] = [array[j], array[i]];

ES6 الجديد يسمح بتعيين متغيرين في وقت واحد. يكون هذا مفيدًا بشكل خاص عندما نريد تبديل قيم متغيرين , حيث يمكننا القيام بذلك في سطر واحد من التعليمات البرمجية. 

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 1
بتاريخ 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
بتاريخ الآن قال Brahim Semmani:

والعنصر j الا يتم تبديله بالعنصر i؟

يتم تبديله بالطبع، لكن هذا الأمر لن يؤثر على أي شيء لأن المتغير j يتم إسناد قمية عشوائية جديدة في كل دورة.

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0
بتاريخ 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
بتاريخ 5 دقائق مضت قال سامح أشرف:

// في الدورة الأولى // i = 4 // j = رقم عشوائي من 0 إلى 4 // أي سيتم تبديل العنصر 4 بأحد العناصر الأخرى في المصفوفة [array[i], array[j]] = [array[j], array[i]];

والعنصر j الا يتم تبديله بالعنصر i؟

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن