٣.٦ الدوال المساعدة للمصفوفات — الجزء الثالث¶
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() تستقبل دالة وتُرجع قيمة أول عنصر يحقق الشرط.
تستقبل الدالة ثلاثة معاملات كحد أقصى:
currentValue: العنصر الحالي، وهو المعامل المستخدم هنا.index: فهرس العنصر الحالي، ويمكن إغفاله.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() تستقبل دالة وقيمة ابتدائية اختيارية، وتُرجع النتيجة النهائية للتجميع.
تستقبل الدالة أربعة معاملات كحد أقصى:
previousValue: القيمة التراكمية المُرجعة من الاستدعاء السابق، وهي مستخدمة هنا.currentValue: العنصر الحالي، وهو المعامل المستخدم هنا.index: فهرس العنصر الحالي، ويمكن إغفاله.array: المصفوفة نفسها، ويمكن إغفالها.
الصياغة هي: array.reduce(function(previousValue, currentValue, index, array){}, initialValue)
التمرين 18: طبّق العمليات التالية على عناصر المصفوفة:
- العنصر الثاني ناقص العنصر الأول.
- نتيجة الخطوة الأولى ناقص العنصر الثالث.
- نتيجة الخطوة الثانية ناقص العنصر الرابع، وهكذا.
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