توفر جافاسكريبت عدة طرق فعالة لتحديد ما إذا كان المصفوف يحتوي على قيمة محددة. يعتمد النهج الأمثل على احتياجاتك – تحقق بسيط من الوجود مقابل بحث أكثر تعقيدًا ينطوي على شروط أو تطابقات متعددة.
جدول المحتويات
- استخدام
.includes()
للتحقق من القيم البسيطة - استخدام
.find()
للبحث الشرطي - استخدام
.filter()
للعثور على تطابقات متعددة - استخدام
.indexOf()
: نهج بديل - استخدام حلقة
for
(غير موصى به) - اعتبارات الأداء
استخدام .includes()
للتحقق من القيم البسيطة
توفر طريقة .includes()
الحل الأكثر مباشرة وغالباً الأكثر كفاءة للتحقق مما إذا كان المصفوف يحتوي على قيمة محددة. تعيد true
إذا وجدت القيمة و false
بخلاف ذلك.
const numbers = [1, 2, 3, 4, 5];
const target = 3;
if (numbers.includes(target)) {
console.log(`المصفوف يحتوي على ${target}`);
} else {
console.log(`المصفوف لا يحتوي على ${target}`);
}
استخدام .find()
للبحث الشرطي
عندما تحتاج إلى تحديد عنصر بناءً على شرط معين بدلاً من قيمته الدقيقة، فإن طريقة .find()
مثالية. تعيد أول عنصر يلبي دالة الاختبار المقدمة، أو undefined
إذا لم يتم العثور على تطابق.
const objects = [
{ id: 1, name: 'Apple' },
{ id: 2, name: 'Banana' },
{ id: 3, name: 'Orange' }
];
const foundObject = objects.find(obj => obj.name === 'Banana');
if (foundObject) {
console.log('وجد:', foundObject);
} else {
console.log('لم يتم العثور على الكائن');
}
استخدام .filter()
للعثور على تطابقات متعددة
لاسترداد جميع العناصر التي تتطابق مع شرط معين، استخدم طريقة .filter()
. تعيد مصفوفة جديدة تحتوي على جميع العناصر التي تمر بالاختبار.
const numbers = [1, 2, 3, 2, 4, 2, 5];
const target = 2;
const filteredNumbers = numbers.filter(number => number === target);
if (filteredNumbers.length > 0) {
console.log(`وجد ${filteredNumbers.length} مثيل من ${target}`);
} else {
console.log(`لم يتم العثور على أي مثيل من ${target}`);
}
استخدام .indexOf()
: نهج بديل
تعيد طريقة .indexOf()
مؤشر أول ظهور لقيمة. تشير قيمة الإرجاع -1 إلى عدم وجود القيمة. على الرغم من كونها وظيفية، إلا أن .includes()
تقدم بشكل عام قابلية قراءة أفضل للتحقق من الوجود البسيط.
const numbers = [1, 2, 3, 4, 5];
const target = 3;
const index = numbers.indexOf(target);
if (index !== -1) {
console.log(`${target} وجد في المؤشر ${index}`);
} else {
console.log(`${target} لم يتم العثور عليه`);
}
استخدام حلقة for
(غير موصى به)
التكرار يدوياً باستخدام حلقة for
ممكن، ولكنه بشكل عام أقل كفاءة وأقل قابلية للقراءة من الطرق المدمجة. من المستحسن استخدام الطرق المدمجة ما لم يكن لديك سبب وجيه لتجنبها.
const numbers = [1, 2, 3, 4, 5];
const target = 3;
let found = false;
for (let i = 0; i < numbers.length; i++) {
if (numbers[i] === target) {
found = true;
break;
}
}
if (found) {
console.log(`${target} وجد`);
} else {
console.log(`${target} لم يتم العثور عليه`);
}
اعتبارات الأداء
للتحقق من الوجود البسيط، تكون .includes()
عادةً هي الأكثر كفاءة وقابلية للقراءة. .find()
و .filter()
هي الأنسب للبحث بناءً على الشروط أو لاسترداد جميع العناصر المتطابقة. تجنب حلقات for
إلا عند الضرورة، حيث أن الطرق المدمجة مُحسّنة للأداء.