Udacity Arrays in javascript

للمتابعة بشكل  افضل يمكنك متابعتها على الرابط  التالي تجمع المبرمجين والمطورين العرب




المصفوفات في الجافاسكربت تستخدم لتخزين اكثر من قيمة على متغير واحد ، قبل التعمق في شرح المصفوفات علينا ان نظيف لمعلومتنا انه لكل متغير عنوان في الذاكرة مثل عناوين المنازل يمكنك عمل عنوان لقيمة في الذاكرة المؤقتة ، لكن الجافاسكربت لا تدعم التمرير البرمتر عبر الريفيرنس لذا ستحتاج ان تحولها الى obj كائن (سنتعرف عليه في الدرس القادم ان شاء الله )
var x = {Value: 0}; function a(obj) { obj.Value++; } a(x); document.write(x.Value);
في الجافاسكربت تتمتع المصفوفات بخصائص واساليب
الخصائص
  1. Array.length
  2. Array.prototype
  3. Array.prototype[@@unscopables]
الاساليب
  1. Array.from()
  2. Array.isArray()
  3. Array.observe()
  4. Array.of()
  5. Array.prototype.concat()
  6. Array.prototype.copyWithin()
  7. Array.prototype.entries()
  8. Array.prototype.every()
  9. Array.prototype.fill()
  10. Array.prototype.filter()
  11. Array.prototype.find()
  12. Array.prototype.findIndex()
  13. Array.prototype.flatMap()
  14. Array.prototype.flatten()
  15. Array.prototype.forEach()
  16. Array.prototype.includes()
  17. Array.prototype.indexOf()
  18. Array.prototype.join()
  19. Array.prototype.keys()
  20. Array.prototype.lastIndexOf()
  21. Array.prototype.map()
  22. Array.prototype.pop()
  23. Array.prototype.push()
  24. Array.prototype.reduce()
  25. Array.prototype.reduceRight()
  26. Array.prototype.reverse()
  27. Array.prototype.shift()
  28. Array.prototype.slice()
  29. Array.prototype.some()
  30. Array.prototype.sort()
  31. Array.prototype.splice()
  32. Array.prototype.toLocaleString()
  33. Array.prototype.toSource()
  34. Array.prototype.toString()
  35. Array.prototype.unshift()
  36. Array.prototype.values()
  37. Array.prototype[@@iterator]()
  38. Array.unobserve()
  39. get Array[@@species]
بطبيعة الحال لن نتطرق لشرحها بالكامل بل سنشرح ما سنحتاج اليه في هذه الدورة فقط والاساليب الاكثر استخداما في الكود ، ان كنا سنقوم بحجز 4 متغيرات ولها نفس المنفعة ان صح التعبير .... فبدلا من القيام بالتالي
var variables1 = "string1";
var variables2 = "string2";
var variables3 = "string3";
مع المصفوفات يمكننا جمعها كالتالي
var variables1 = ["string1", "string2", "string3"];
لنقل انك تريد ان تقوم بعملية حلقة مفرغة loop للبحث عن string محدد وليس لديك فقط 3 متغيرات بل لديك 10 الاف string افضل امر للقيام به واختصار الوقت هي المصفوفات تستطيع ان تحجز العديد من القيمات في متغير واحد

حتى لا اطيل عليكم سنقوم بشرح الكويزات الخاصة بالدورة
Quiz: UdaciFamily (6-1)
في هذا الكويز طلب منكم انشاء مصفوفة باسم udaciFamily يكون فيها اسمك وكل من اسم
"Julia", "James"
Quiz: Building the Crew (6-2)
نحن نعلم ان المصفوفات تقوم بحجز عدة قيم في متغير واحد . في هذا الكويز لدينا
var captain = "Mal"; var second = "Zoe"; var pilot = "Wash"; var companion = "Inara"; var mercenary = "Jayne"; var mechanic = "Kaylee";
وطلب منكم جمعها في crew كمتغير لمصفوفة ثم اعادة طباعته

Quiz: The Price is Right (6-3)
في البرمجة بشكل اجمالي يعتبر الصفر بقيمة واحد اي ان قلنا 0 . 1. 2 فاننا نعني 1 . 2 .3 فالقيمة صفر تعني واحد و2 تعني واحد و3 تعني اثنان وهي دواليك في المصفوفات ينطبق هذا المثال بشكل ملحوظ حيث يكون ما يسمى ب 0 index هو الرقم الاولي
في المعطيات لدينا المصفوفة التالية
var prices = [1.23, 48.11, 90.11, 8.50, 9.99, 1.00, 1.10, 67.00];
نعتبر القيمة 1.23 هي 0 index المطلوب هو طباعة العنصر الاول والعنصر الثالث والعنصر السابق يمكنك تغيير العناصر بقيم مختلفة مثال
prices[4]=90.12;
Quiz: Colors of the Rainbow (6-4)
تعرفنا مسبقا في الدورة عن العنصر splice والعنصر push في هذا الكويز سنتعلم طريقة استخدامهم معا فخواص splice تفيذ في استبدال اي عنصر داخل المصفوفة وpush تضيف عنصر لاخر المصفوفة
في المعطيات لدينا
var rainbow = ["Red", "Orange", "Blackberry", "Blue"];
والمطلوب منا
var rainbow = ["Red", "Orange", "Yellow", "Green", "Blue", "Purple"];
المطلوب هو ازالة Blackberry من المصفوف واستبداله باستخدام push ل Yellow و Green ثم بعدها تضيف push اخرى لPurple
Quiz: Quidditch Cup (6-5)
في هذا الكويز البسيط جدا طلب منا بناء دالة باسم hasEnoughPlayers هذه الدالة تحدد ان كان عدد اللاعبين هو 7 فانه يمكننا ان نقول لدينا فريق للعب ونعبر عليه بالشرطية if منطقيا يا true او false في حالة عدم اكتمال الفريق عليك الا تنسى ان 0 تعني 1 مع العلم انه لدينا المصفوفة التالية
var team = ["Oliver Wood", "Angelina Johnson", "Katie Bell", "Alicia Spinnet", "George Weasley", "Fred Weasley", "Harry Potter"];
Quiz: Joining the Crew (6-6)
في هذا الكويز لدينا مصفوفة على هذا الشكل ونريد ادخال عن طريقة PUSH عليها
var crew = [captain, second, pilot, companion, mercenary, mechanic];
قيم المصفوفة
var captain = "Mal"; var second = "Zoe"; var pilot = "Wash"; var companion = "Inara"; var mercenary = "Jayne"; var mechanic = "Kaylee";
القيم التي نريد ادخالها
var doctor = "Simon";
var sister = "River";
var shepherd = "Book";
لو ركزت جيدا تقريبا اعطوك الاجابة واضحة

Quiz: Checking out the Docs (6-7)
في هذا الكويز سيتم اختبار مهارتكم في فهم الاساليب الخاصة بالمصفوفات بطبيعة الحالة ليس كل الاساليب بل المهم منها والباقي يعتمد على اشتهادك وبحثك في محركات البحث
نباشر بشرح الكويز على شكل canadians system
1 - ما هي افضل طريقة لعكس المصفوفة التالية :
var reverseMe = ["h", "e", "l", "l", "o"];
مع العلم انه لديك عدة خيارات لو دققت اللغو ستجد الاجابة في السؤال
2 - كذلك هذا السؤال هو نفس الشيء للسؤال الاو ل لديك المصفوفة التالية وماهي افضل وسيلة للفرز :
var sortMe = [2, 1, 10, 7, 6];
ستجد الجواب في السؤال ان ركزت جيدا
3 - هنا لديك المصفوفة التالية :
var removeFirstElement = ["a", "b", "c"];
وعليك استخدام اسلوبين الاسلوب الاول للصق والثاني للتحويل
4 - ما هي افضل وسيلة لتحويل مصفوفة الى string مع العلم انه لدينا المصفوفة التالية :
var turnMeIntoAString = ["U", "d", "a", "c", "i", "t", "y"];
Quiz: Another Type of Loop (6-8)
هذا الكويز معقد بعض الشيء لكن ان شاء الله سنشرحه سطر بسطر
نبدأ دائما بتحليل المعطيات التي لدينا :
المصفوفة test
var test = [12, 929, 11, 3, 199, 1000, 7, 1, 24, 37, 4, 19, 300, 3775, 299, 36, 209, 148, 169, 299, 6, 109, 20, 58, 139, 59, 3, 1, 139];
المطلوب منا ان نستخدم الاسلوب forEach الخاص بالمصفوفات ان نضع حلقة مفرغة ما بين 0 و 100 وان نطبع الاعداد القابلة للقسمة على 3
افضل طريقة هي جعل المصفوفة test لها اسلوب forEach على هذا الشكل test.forEach تساوي فانكشن لها برمترات نستخدمها في الدالة ، بما انهم طلبو منا ان نقوم بقسمة الاعداد على 3 فاننا سنقسمها على odd اي فردية وفي حالة استوفاء الشرط فاننا سنطبعها تصاعديا الى 100 مستخدمين البرمتر الثاني كاندكس للبرمتر الاول تزايديا مع البرمتر الثالث وبعدها نطبع test
Quiz: I Got Bills (6-9)
عندما نتحدث عن القيم العشرية فاننا نستدعي toFixed لتحديد القيمة العشرية التي نريدعا بعد الفاصلة ، في الحقيقة هي افتراضيا قيمتين ويتم التعبير عنها بالكود التالي
toFixed(2)
سواء قمنا بتحديدها او لم نقم بتحديدها ، ولدينا ايضا map هذا الاسلوب ياخذ كل قيمة في المصفوفة ويعيدها على شكل مخرج اخر ، فان كان لدينا تغيير في كل قيم المصفوفة فالاسلوب map هو الافضل
ننتقل الى المعطيات
var bills = [50.23, 19.12, 34.01, 100.11, 12.15, 9.90,
29.11, 12.99, 10.00, 99.22, 102.20, 100.10, 6.77, 2.22];
المصفوفة التالية كلها اعداد عشرية ، المطلوب منا هو ان نحجز map المصفوفة في متغير totals ، وان نضرب القيمة النسبية في البرام زائد البرام نفسه لنعيد في الريتورن الخاص بالفانكشن قيمة tofix2 ثم نطبع المصفوفة الجديدة totals بدل المصفوفة القديمة bills
Quiz: Nested Numbers (6-10)
في هذا الكويز بسيط جدا ان عرفنا طريقة تحليل السؤال لانه يتيح لنا طريقة لفكه جميلة جدا لنعتبر المصفوفة التالية عبارة عن جدول :
var numbers = [
[243, 12, 23, 12, 45, 45, 78, 66, 223, 3],
[34, 2, 1, 553, 23, 4, 66, 23, 4, 55],
[67, 56, 45, 553, 44, 55, 5, 428, 452, 3],
[12, 31, 55, 445, 79, 44, 674, 224, 4, 21],
[4, 2, 3, 52, 13, 51, 44, 1, 67, 5],
[5, 65, 4, 5, 5, 6, 5, 43, 23, 4424],
[74, 532, 6, 7, 35, 17, 89, 43, 43, 66],
[53, 6, 89, 10, 23, 52, 111, 44, 109, 80],
[67, 6, 53, 537, 2, 168, 16, 2, 1, 8],
[76, 7, 9, 6, 3, 73, 77, 100, 56, 100]
];
بطبيعة الحال الجداول فيها صفوف واعمدة ، اذن افضل وسيلة للتعامل مع الصفوف والاعمدة هي nested سنستخدم nested for لتحديد الاصفوف افقيا والاعمدة ، نبدا بالاسطر row لحساب كل الاسطر في المصفوفة مستخدمين length بعدها في for الثانية سنقوم بالبحث في الاعمدة تبع الاسطر بحثين عن القيم الزوجية even مستخدمين الدالة الشرطية if وكل ما ليس هو even بطبيعة الحال سيكون odd
numbers[row][column]
ما قمنا به هو تعويض لكل قيمة فردية في المصفوفة ب odd وكل قيمة زوجية ب odd
===================
الى هنا ينتهي شرح المصفوفات

Post a Comment

0 Comments