انتقل إلى المحتوى

٣.٦ الدوال المساعدة للمصفوفات — الجزء الثالث

find()

التمرين 1: تحقّق من وجود عدد أكبر من أو يساوي 50 في المصفوفة.

var arr = [10, 20, 80, 150, 30, 0, 120];
var anyValues = arr.some(value => value >= 50);

console.log(anyValues);

النتيجة هي: true

التمرين 2: ارجع إلى التمرين 1؛ أرجع أول عنصر أكبر من أو يساوي 50.

var arr = [10, 20, 80, 150, 30, 0, 120];
var firstElement = function(){
  for(element of arr){
    if (element >= 50){
      return element;
    }
  }
}();

console.log(firstElement);

النتيجة هي: 80

التمرين 3: تأمّل الشيفرة التالية وقارنها مع التمرين 2 .

var arr = [10, 20, 80, 150, 30, 0, 120];
var firstElement = arr.find(value => value >= 50);

console.log(firstElement);

النتيجة هي: 80

find()

باستخدام array.find()يمكننا استرجاع أول عنصر يحقق الشرط.

array.find() تستقبل دالة وتُرجع قيمة أول عنصر يحقق الشرط.

تستقبل الدالة ثلاثة معاملات كحد أقصى:

  1. currentValue: العنصر الحالي، وهو المعامل المستخدم هنا.
  2. index: فهرس العنصر الحالي، ويمكن إغفاله.
  3. array: المصفوفة نفسها، ويمكن إغفالها.

التمرين 4: أرجع أول عنصر أكبر من 5 وأقل من 10 في المصفوفة التالية.

var arr = [5, 3, 0, 40, 110, 7, 9];
var firstElement = arr.find(function(value){
  if(value > 5 && value < 10){
    return value;
  }
});

console.log(firstElement);

النتيجة هي: 7

التمرين 5: أرجع أول سلسلة طولها أقل من 4.

var arr = ["Hello", "Lala", "Ali", "Ola", "Let's see"];
var firstElement = arr.find(function(value){
  if(value.length < 4){
    return value;
  }
});

console.log(firstElement);

النتيجة هي: Ali

التمرين 6: أرجع أول عنصر تساوي قيمته فهرسه.

var arr = [3, 8, 2, 9, 4];
var firstElement = arr.find(function(value, index){
  return value == index;
});

console.log(firstElement);

النتيجة هي: 2

التمرين 7: أرجع فهرس أول عنصر يحتوي على v.

var arr = ["We go there", "I mean to venus", "Life there is a bit complicated", "but it can open new doors", "to the new world"];

var firstElement = arr.find(function(value, index){
     if(value.indexOf("v") !== -1){
       return index;
     }
});

console.log(firstElement);

النتيجة هي: I mean to venus

التمرين 8: أرجع أول عنصر يساوي 1.

var arr = [5, 6, 7, 79, 99, 789];
var firstElement = arr.find(value => value === 1);

console.log(firstElement);

النتيجة هي: undefined

التمرين 9: أرجع أول عنصر لا يساوي null أو undefined أو "" أو 0 أو false.

var arr = [null, undefined, 0, 0, false, null, "", undefined, null, 0];
var firstElement = arr.find(value => !!value);

console.log(firstElement);

النتيجة هي: undefined

ملاحظة

إذا لم يحقق أي عنصر شرط find() ، فتُرجع undefined

التمرين 10: احذف جميع القيم الكاذبة من المصفوفة التالية.

var arr = [null, undefined, 1, 0, 0, false, null, "", undefined, null, 0, 1, 5];
var filteredArr = arr.filter(value => !!value);

console.log(filteredArr);

النتيجة هي: (3) [1, 1, 5]

التمرين 11: ارجع إلى التمرين 10؛ اضرب كل عنصر في 10، وأرجع المصفوفة الجديدة.

var arr = [null, undefined, 1, 0, 0, false, null, "", undefined, null, 0, 1, 5];
var filteredArr = arr.filter(value => !!value);
var newArr = filteredArr.map(value => value * 10);

console.log(newArr);

النتيجة هي: (3) [10, 10, 50]

التمرين 12: ارجع إلى التمرين 11؛ أرجع فهرس أول عنصر في newArr أكبر من 5.

var arr = [null, undefined, 1, 0, 0, false, null, "", undefined, null, 0, 1, 5];
var filteredArr = arr.filter(value => !!value);
var newArr = filteredArr.map(value => value * 10);
var firstElement = newArr.find(value => value >= 5);


console.log(firstElement);

النتيجة هي: 10

التمرين 13: أعد تنفيذ التمرين 12 باستخدام تصريح واحد عن متغير.

var arr = [null, undefined, 1, 0, 0, false, null, "", undefined, null, 0, 1, 5];
var firstElement = arr.filter(value => !!value)
                      .map(value => value * 10)
                      .find(value => value >= 5);


console.log(firstElement);

النتيجة هي: 10

reduce()

التمرين 14: أوجد مجموع عناصر المصفوفة التالية.

var arr = [1, 5, 10, 0, -8, 50, 7];
var result = function(){
  var sum = 0;
  for(element of arr){
    sum += element;
  }
  return sum;
}();

console.log(result);

النتيجة هي: 65

التمرين 15: تأمّل الشيفرة التالية وقارنها مع التمرين 14 .

var arr = [1, 5, 10, 0, -8, 50, 7];
var result = arr.reduce(function(sum, currentItem){
  return sum + currentItem;
}, 0);

console.log(result);

النتيجة هي: 65

التمرين 16: أوجد حاصل ضرب عناصر المصفوفة التالية.

var arr = [1, 2, 5, 6];
var result = function(){
  var prod = 1;
  for(element of arr){
    prod *= element;
  }
  return prod;
}();

console.log(result);

النتيجة هي: 60

التمرين 17: تأمّل الشيفرة التالية وقارنها مع التمرين 16 .

var arr = [1, 2, 5, 6];
var result = arr.reduce(function(prod, currentItem){
  return prod * currentItem;
}, 1);
console.log(result);

النتيجة هي: 60

reduce()

باستخدام array.reduce()يمكننا اختزال المصفوفة إلى قيمة واحدة.

array.reduce() تستقبل دالة وقيمة ابتدائية اختيارية، وتُرجع النتيجة النهائية للتجميع.

تستقبل الدالة أربعة معاملات كحد أقصى:

  1. previousValue: القيمة التراكمية المُرجعة من الاستدعاء السابق، وهي مستخدمة هنا.
  2. currentValue: العنصر الحالي، وهو المعامل المستخدم هنا.
  3. index: فهرس العنصر الحالي، ويمكن إغفاله.
  4. array: المصفوفة نفسها، ويمكن إغفالها.

الصياغة هي: array.reduce(function(previousValue, currentValue, index, array){}, initialValue)

التمرين 18: طبّق العمليات التالية على عناصر المصفوفة:

  1. العنصر الثاني ناقص العنصر الأول.
  2. نتيجة الخطوة الأولى ناقص العنصر الثالث.
  3. نتيجة الخطوة الثانية ناقص العنصر الرابع، وهكذا.
var arr = [5, 6, 9, 10 , 0, 79];
var result = arr.reduce((sub, val) => sub-val);

console.log(result);

النتيجة هي: -99

التمرين 19: أعد تنفيذ التمرين 18؛ اضبط القيمة الابتدائية على 200.

var arr = [5, 6, 9, 10 , 0, 79];
var result = arr.reduce((sub, val) => sub-val, 200);

console.log(result);

النتيجة هي: 91

التمرين 20: أعد تنفيذ التمرين 15؛ اضبط القيمة الابتدائية على 10.

var arr = [1, 5, 10, 0, -8, 50, 7];
var result = arr.reduce(function(sum, currentItem){
  return sum + currentItem;
}, 10);

console.log(result);

النتيجة هي: 75

التمرين 21: أعد تنفيذ التمرين 16؛ اضبط القيمة الابتدائية على -8.

var arr = [1, 2, 5, 6];
var result = arr.reduce(function(prod, currentItem){
  return prod * currentItem;
}, -8);
console.log(result);

النتيجة هي: -480

التمرين 22: اقسم كل عنصر في المصفوفة على 10.

var arr = [20, 50, 70, 80, 100, 151, 789, 0, 60];
var newArr = arr.map(value => value /10);

console.log(newArr);

النتيجة هي: (9) [2, 5, 7, 8, 10, 15.1, 78.9, 0, 6]

التمرين 23: ارجع إلى التمرين 22؛ أوجد مجموع عناصر المصفوفة الناتجة.

var arr = [20, 50, 70, 80, 100, 151, 789, 0, 60];
var result = arr.map(value => value /10)
                .reduce((sum, value) => sum + value, 0);

console.log(result);

النتيجة هي: 132

التمرين 24: ارجع إلى التمرين 23؛ أوجد متوسط المصفوفة الناتجة. تلميح: average = sum / length.

var arr = [20, 50, 70, 80, 100, 151, 789, 0, 60];
var result = arr.map(value => value /10)
                .reduce((sum, value) => sum + value, 0)
                / arr.length;

console.log(result);

النتيجة هي: 14.666666666666666

التمرين 25: أوجد متوسط علامات الطالب.

var marks = [100, 200, 800, 600, 700, 0, 400, 900];
var result = marks.reduce((sum, value)=> sum + value, 0) / marks.length;

console.log(result);

النتيجة هي: 462.5

التمرين 26: أوجد مجموع القيم التي تساوي 1 في المصفوفة.

var arr = [1, null, 1, 0, undefined, 5, "Hello", false, 1, true, 2];
var result = arr.filter(value => value === 1).reduce(function(sum,  currentItem){return sum + currentItem}, 0);

console.log(result);

النتيجة هي: 3

التمرين 27: أوجد مجموع مربعات عناصر المصفوفة.

var arr = [5, 7, 8, 9];

var sum = arr.map(value => value * value).reduce((sum, value) => sum + value, 0);

console.log(sum);

النتيجة هي: 219