تعد مقارنة المصفوفات واحدة من أكثر العمليات شيوعا في تطوير جافا سكريبت. بعد كل شيء ، في كثير من الأحيان نحن بحاجة للتحقق ما إذا كان اثنين من المصفوفات تحتوي على نفس العناصر أو تختلف.
في هذه المقالة ، سنلقي نظرة على طرق وخوارزميات مختلفة لمقارنة المصفوفات في جافا سكريبت لمساعدتك في اختيار الأكثر كفاءة وملاءمة لحالتك الخاصة.
سنتحدث عن كيفية استخدام طرق الصفيف مثل كل() وبعض () ، وكذلك الخوارزميات العودية والخوارزميات باستخدام الحلقات. سننظر أيضا في كيفية مقارنة المصفوفات ثنائية الأبعاد ومصفوفات الكائنات.
تعد مقارنة المصفوفات مهمة مهمة في تطوير جافا سكريبت ، ويمكن أن يؤثر اختيار الطريقة أو الخوارزمية الصحيحة بشكل كبير على أداء التطبيق الخاص بك. كن حذرا وادرس جميع الأساليب والخوارزميات المقدمة في المقالة من أجل استخدام النهج الأمثل في كل موقف محدد.
- طرق لمقارنة اثنين من صفائف جافا سكريبت
- مقارنة باستخدام حلقة
- باستخدام طريقة تضمين ()
- مقارنة باستخدام كل () طريقة
- باستخدام طريقة التصفية ()
- مقارنة باستخدام طريقة تقليل()
- باستخدام طريقة إيسيكوال() من مكتبة لوداش l library [ + ]
- مقارنة باستخدام عامل التشغيل ===
- سؤال وجواب
- الطريقة التي هي الأنسب لمقارنة اثنين من المصفوفات في جافا سكريبت?
- ما هي الطريقة التي يمكن استخدامها لمقارنة اثنين من المصفوفات إذا كان لديهم أطوال مختلفة?
طرق لمقارنة اثنين من صفائف جافا سكريبت
هناك العديد من الطرق التي تسمح لك بمقارنة صفائف جافا سكريبت. دعونا ننظر إلى بعض منهم:
- : يحول عناصر المصفوفة إلى سلاسل ويقارنها كسلاسل. في الوقت نفسه ، يتم أيضا أخذ ترتيب العناصر وقيمها في الاعتبار عند المقارنة.
- : يجمع بين جميع عناصر المصفوفة في سلسلة واحدة باستخدام الفاصل المحدد ويقارن السلاسل الناتجة. كما يتم أخذ ترتيب العناصر وقيمها في الاعتبار.
- : يسمح لك بالتحقق مما إذا كانت جميع عناصر المصفوفة نفسها تفي بالشرط المحدد المحدد في الوظيفة التي تم تمريرها. ثم يقارن نتائج التحقق من صحة المصفوفين.
- : يسمح لك بالتحقق مما إذا كان عنصر واحد على الأقل من نفس المصفوفة يفي بالشرط المحدد المحدد في الوظيفة التي تم تمريرها. ثم يقارن نتائج التحقق من صحة المصفوفين.
إذا كانت هناك حاجة إلى مقارنة دقيقة للمصفوفات (حسب قيمة كل عنصر وترتيبها) ، فيمكنك استخدام طريقة الحلقة أو تقليل (). تتم مقارنة كل عنصر حسب الفهرس وقيمها. إذا كانت قيمة واحدة على الأقل مختلفة ، فإن المصفوفات تعتبر مختلفة.
نموذج التعليمات البرمجية لمقارنة المصفوفات باستخدام حلقة:
function compareArrays(arr1, arr2) {
if (arr1.length !== arr2.length) {
return false;
}
for (let i = 0; i < arr1.length; i++) {
if (arr1[i] !== arr2[i]) {
return false;
}
}
return true;
}
const array1 = [1, 2, 3];
const array2 = [1, 2, 3];
console.log(compareArrays(array1, array2)); // true
Если массивы имеют разное количество элементов, то они будут считаться различными. إذا كان عدد العناصر هو نفسه ، ولكن القيم مختلفة ، فسيتم أيضا اعتبار المصفوفات مختلفة.
يعتمد اختيار طريقة مقارنة الصفيف على المهمة المحددة ومتطلباتها. يجب أن يؤخذ في الاعتبار أن بعض الأساليب قد تكون أكثر كفاءة من حيث الأداء مقارنة بالآخرين.
مقارنة باستخدام حلقة
واحدة من أسهل الطرق لمقارنة اثنين من المصفوفات في جافا سكريبت هو استخدام حلقة لتكرار من خلال عناصر كل من المصفوفات ومقارنة قيمها.
هنا مثال رمز يوضح هذا النهج:
مقارنة الوظائف (أر 1 ، أر 2) {
إذا (آر 1.الطول != آر 2.الطول) {
العودة كاذبة;
}
إلى عن على (دعني = 0 ؛ أنا < أر1.الطول ؛ أنا {) {
إذا (أر1 [أنا]!= = أر2 [أنا]) {
العودة كاذبة;
}
}
العودة الحقيقية;
}
كونست أراي1 = [1, 2, 3, 4, 5];
كونست أراي2 = [1, 2, 3, 4, 5];
كونست أراي3 = [1, 2, 3, 4, 6];
وحدة التحكم.سجل (مقارنة المصفوفات (مجموعة 1 ، مجموعة 2)) ؛ / / صحيح
وحدة التحكم.سجل (مقارنة المصفوفات (مجموعة 1 ، مجموعة 3)) ؛ / / خطأ
، لأن هذا يعني أن المصفوفات ليست متكافئة.
.
يمكن استخدام الكود أعلاه لمقارنة المصفوفات من أي حجم ونوع من العناصر. ومع ذلك ، يجب أن نتذكر أن هذا النهج له تعقيد ا(ن) ، أين ن هو حجم المصفوفات. إذا كانت المصفوفات كبيرة جدا ، فقد يؤدي ذلك إلى عدم الكفاءة وبطء الأداء.
باستخدام يشمل ()
الطريقة تتضمن () الطريقة هي طريقة جافا سكريبت تسمح لك بالتحقق مما إذا كانت المصفوفة تحتوي على عنصر معين. يقوم بإرجاع قيمة منطقية لصحيح إذا تم العثور على العنصر في المصفوفة ، والخطأ إذا كان العنصر مفقودا.
لاستخدام طريقة تضمين () ، نسميها على صفيف وتمرير العنصر المطلوب كوسيطة. على سبيل المثال:
أرقام كونست = [1, 2, 3, 4, 5];
كونست سيرتشنومبر = 3;
يتضمن كونست العدد = الأرقام.يشمل (رقم البحث);
وحدة التحكم.السجل (يتضمن الرقم) ؛ / / صحيح
في هذا المثال ، يتحقق الأسلوب يتضمن() ما إذا كان صفيف الأرقام يحتوي على العنصر 3. نظرا لأن هذا العنصر موجود في المصفوفة ، فإن الطريقة ترجع بشكل صحيح.
يمكنك أيضا استخدام طريقة تضمين () للتحقق من وجود سلسلة معينة في مجموعة من السلاسل:
كونست الفواكه = ['التفاح' ، 'الكمثرى' ، 'الموز'];
كونست سيرتشفرويت = 'الكمثرى';
كونست يشملالفاكهة = الفواكه.يشمل (بحثفاكهة);
وحدة التحكم.سجل (يشمل الفاكهة) ؛ / / صحيح
في هذه الحالة ، يتضمن() طريقة يتحقق ما إذا كانت مجموعة الفواكه تحتوي على سلسلة "الكمثرى". نظرا لأن هذه السلسلة موجودة في المصفوفة ، فإن الطريقة ترجع صحيح.
يمكن أيضا استخدام طريقة التضمين () للتحقق من وجود عنصر في مصفوفة من الكائنات عن طريق تحديد خاصية كائن كوسيطة:
كونست المستخدمين = [
{ الاسم: 'فاسيا' ، العمر: 25 },
{الاسم: 'Петя' ، العمر: 30 },
{الاسم: 'Маша' ، العمر: 35 }
];
كونست سيرتشوسر = {الاسم: 'Петя' ، العمر: 30 };
يتضمن كونست المستخدم = المستخدمين.يشمل (مستخدم البحث);
وحدة التحكم.سجل (يتضمن المستخدم) ؛ / / خطأ
Includes يشمل () users ، users المستخدمون name الاسم: '' ' ، العمر: 30. ومع ذلك ، نظرا لأن الكائنات في جافا سكريبت تتم مقارنتها بالرجوع إليها ، فستكون النتيجة خاطئة ، حتى إذا كان هناك كائن له خصائص متطابقة في المصفوفة.
يعد استخدام طريقة التضمين () طريقة بسيطة ومريحة للتحقق من وجود عنصر في صفيف. ومع ذلك ، تجدر الإشارة إلى أن هذه الطريقة لا تسمح لك بالتحقق من العناصر ذات القيمة المحددة الموجودة في كائنات الصفيف. في مثل هذه الحالات ، قد يكون من المفيد استخدام طرق وخوارزميات أكثر تقدما.
مقارنة باستخدام كل () طريقة
تقدم جافا سكريبت طرقا مختلفة لمقارنة صفيفتين. إحدى هذه الطرق هي استخدام كل () طريقة. تؤدي هذه الطريقة وظيفة رد الاتصال لكل عنصر من عناصر المصفوفة وتعود إلى الحقيقة إذا كانت جميع العناصر تفي بشرط معين ، أو خاطئة إذا كان عنصر واحد على الأقل لا يفي بالشرط المحدد.
لمقارنة صفيفتين باستخدام طريقة كل () ، اتبع الخطوات التالية:
- إنشاء وظيفة رد الاتصال التي من شأنها مقارنة عناصر اثنين من المصفوفات;
- استخدم طريقة كل() في المصفوفة الأولى وقم بتمرير وظيفة رد الاتصال التي تم إنشاؤها إليها كوسيطة;
- تحقق مما إذا كانت طريقة كل() ترجع صحيحة لكلا المصفوفين. إذا كانت الإجابة بنعم ، فإن المصفوفات متطابقة. إذا لم يكن كذلك ، فإن المصفوفات مختلفة.
نموذج التعليمات البرمجية:
مقارنة الدالة (المصفوفات 1 ، المصفوفات 2) {
عودة مجموعة 1.كل(وظيفة (عنصر ، فهرس) {
عنصر الإرجاع = = = الصفة2 [فهرس];
});
}
فار أر1 = [1 ، 2 ، 3];
فار أر2 = [1 ، 2 ، 3];
وحدة التحكم.سجل (مقارنة المصفوفات (أر 1 ، أر 2)) ؛ / / صحيح
في هذا المثال ، أنشأنا مقارنةمصفوفات الدالة التي تقارن عناصر اثنين من المصفوفات. يتم تطبيق كل طريقة() على المصفوفة أر1 ، ويتم تمرير عنصر دالة المقارنة = = = الصفة2 [فهرس] كوسيطة. تقارن هذه الوظيفة عناصر صفيفتين حسب فهارسها. نتيجة لذلك ، ترجع وظيفتنا بشكل صحيح ، لأن جميع عناصر المصفوفات متطابقة.
باستخدام طريقة كل () ، يمكن مقارنة المصفوفات من أي طول وأي محتوى. ومع ذلك ، يجب أن نتذكر أن هذه الطريقة تقارن عنصر المصفوفات بعنصر ، لذلك يجب أن يكون للمصفوفات نفس الطول.
باستخدام طريقة التصفية ()
طريقة التصفية () هي واحدة من أكثر الطرق فعالية لمقارنة صفيفتين في جافا سكريبت. يجعل من السهل تصفية عناصر مصفوفة واحدة بناء على ظروف معينة.
بناء جملة طريقة المرشح () كما يلي:
نيوراي = صفيف.تصفية (رد)
أين:
- الصفيف هو صفيف المصدر الذي نريد مقارنته.
- رد الاتصال هو وظيفة سيتم تطبيقها على كل عنصر من عناصر المصفوفة المصدر.
تقوم طريقة التصفية() بإنشاء وإرجاع مصفوفة جديدة ، والتي تحتوي فقط على عناصر المصفوفة الأصلية التي تم إرجاع وظيفة رد الاتصال لها بشكل صحيح.
فيما يلي مثال بسيط على استخدام طريقة المرشح () لمقارنة صفيفتين:
// مصفوفات المصدر
مجموعة فار 1= [1, 2, 3, 4, 5];
فار أراي2 = [3, 4, 5, 6, 7];
// وظيفة رد الاتصال للتصفية
وظيفة إيسيناراي (عنصر) {
عودة مجموعة2.فهرس (عنصر)!== -1;
}
// تصفية الصفيف
فار نيوراي = مجموعة 1.مرشح (إيزيناراي);
// إخراج النتيجة
وحدة التحكم.سجل (نيوراي); // [3, 4, 5]
. إذا تم العثور على العنصر ، ترجع الدالة صحيح ، وإلا خطأ.
.
يمكن أيضا استخدام طريقة المرشح () لإجراء مقارنات أكثر تعقيدا عن طريق إضافة شروط إضافية إلى وظيفة رد الاتصال. على سبيل المثال ، يمكنك التحقق مما إذا كان العنصر أكبر من رقم معين أو يحتوي على سلسلة معينة ، وهكذا.
خاتمة:
- طريقة التصفية () هي طريقة فعالة لمقارنة صفيفتين في جافا سكريبت.
- يجعل من السهل تصفية عناصر مصفوفة واحدة بناء على ظروف معينة.
- تقوم طريقة التصفية() بإنشاء وإرجاع مصفوفة جديدة تتكون فقط من عناصر المصفوفة الأصلية التي عادت وظيفة رد الاتصال لها بشكل صحيح.
مقارنة باستخدام طريقة تقليل()
طريقة واحدة لمقارنة اثنين من المصفوفات في جافا سكريبت هو استخدام طريقة الحد (). تؤدي طريقة تقليل () وظيفة رد الاتصال لكل عنصر من عناصر المصفوفة ، مع إرجاع قيمة واحدة ناتجة.
مثال على مقارنة صفيفتين باستخدام طريقة تقليل () يبدو كما يلي:
كونست أراي1 = [1, 2, 3, 4, 5];
كونست أراي2 = [1, 2, 3, 4, 5];
كونست أريارايساوال = صفيفة1.تقليل ((تراكم ، كيرنتفالو ، كيرنتندكس) = > {
إذا (كيرنتفالو = = = مجموعة 2 [كيرنتندكس]) {
عودة تراكم;
} آخر {
العودة كاذبة;
}
} ، صحيح);
إذا (صفائف متساوية) {
وحدة التحكم.سجل ("المصفوفات متساوية");
} آخر {
وحدة التحكم.سجل ("المصفوفات ليست متساوية");
}
في هذا المثال ، نقوم بإنشاء صفيفتين ثم نقارنهما باستخدام طريقة تقليل (). يتم تمرير القيمة الحقيقية كقيمة أولية للمجمع. ثم ، لكل عنصر من عناصر المصفوفة ، نقارنه بالعنصر المقابل في المصفوفة الثانية. إذا كانت القيم متساوية ، فإننا نعيد القيمة الحالية للبطارية. إذا كانت القيم ليست متساوية ، نعود كاذبة.
في النهاية ، يتم تحديد نتيجة المقارنة ويتم عرض الرسالة المقابلة في وحدة التحكم.
تتمثل ميزة استخدام طريقة الاختزال () لمقارنة صفيفتين في مرونتها وقدرتها على العمل مع عمليات المقارنة التعسفية. ومع ذلك ، يجب أن تكون حذرا عند استخدام هذه الطريقة لتحديد وظيفة رد الاتصال وقيمة البطارية الأصلية بشكل صحيح.
باستخدام طريقة إيسيكوال() من مكتبة لوداش l library [ + ]
واحدة من الطرق الأكثر شعبية ومريحة لمقارنة اثنين من المصفوفات في جافا سكريبت هو طريقة إيسيكوال (l library) من مكتبة لوداش. لوداش هي مكتبة توفر العديد من الطرق لتبسيط وتحسين العمل مع البيانات في جافا سكريبت.l..
لاستخدام طريقة إيسيكوال () ، تحتاج إلى توصيل مكتبة لوداش إلى المشروع الخاص بك.l.. يمكنك توصيل المكتبة باستخدام كندي أو تثبيته من خلال إدارة حزمة الآلية الوقائية الوطنية:
بعد توصيل لوداش ، يمكنك استخدام طريقة إيسيكوال() لمقارنة اثنين من المصفوفات l Lod [ + ]:
صف 1 = [1 ، 2 ، 3];
صف 2 = [1 ، 2 ، 3];
كونست إيسيكالاريز =_.إيسيكوال (صفيف 1 ، صفيف 2);
إذا (يساوي) {
وحدة التحكم.سجل ('صفائف متساوية');
} آخر {
وحدة التحكم.سجل ('المصفوفات ليست متساوية');
}
طريقة إيسيكوال() يقارن اثنين من المصفوفات وإرجاع قيمة منطقية من صحيح إذا كانت المصفوفات متساوية ، وكاذبة خلاف ذلك. تقارن هذه الطريقة ليس فقط قيم عناصر المصفوفة ، ولكن أيضا ترتيبها ونوع البيانات. هذا يجعلها أداة موثوقة لمقارنة المصفوفات في جافا سكريبت.
ومع ذلك ، فإن طريقة إيسيكوال() لديها قيود واحدة: فإنه يمكن مقارنة اثنين فقط من المصفوفات. إذا كنت بحاجة إلى مقارنة أكثر من اثنين من المصفوفات ، يمكنك استخدام مزيج من إيسيكوال() وكل() الأساليب. على سبيل المثال:
صف 1 = [1 ، 2 ، 3];
صف 2 = [1 ، 2 ، 3];
مجموعة كونست 3 = [4 ، 5 ، 6];
كونست إيسيكالاريز =_.متساوي (صفيف 1 ، صفيف 2)&&_.إيسيكوال (صفيف 2 ، صفيف 3);
إذا (يساوي) {
وحدة التحكم.سجل ('صفائف متساوية');
} آخر {
وحدة التحكم.سجل ('المصفوفات ليست متساوية');
}
في هذا المثال ، نقارن ثلاث صفائف ونتحقق مما إذا كانت جميعها متساوية بشكل فردي. إذا كانت جميع المصفوفات متساوية ، ثم متغير إيسيكالاريز سيكون لها قيمة صحيح ، وإلا كاذبة.
طريقة إيسيكوال () من مكتبة لوداش هي أداة سهلة ومريحة لمقارنة المصفوفات في جافا سكريبت.l. [ + ]. يسمح لك بمقارنة المصفوفات حسب العناصر وترتيبها ونوع البيانات. هذه الطريقة مفيدة بشكل خاص إذا كنت بحاجة إلى مقارنة أكثر من صفيفتين.
مقارنة باستخدام عامل التشغيل ===
واحدة من أبسط الطرق وأكثرها قابلية للفهم لمقارنة صفيفتين في جافا سكريبت هي استخدام عامل المقارنة '= = = ' ، الذي يقارن القيم والأنواع.
عندما نقارن صفيفتين باستخدام عامل التشغيل = = = ، يقارن جافا سكريبت كل عنصر من كلا المصفوفين. إذا كانت جميع العناصر وترتيبها في كلا المصفوفين متماثلين ، فستكون النتيجة صحيحة. خلاف ذلك ، إذا لم يتطابق عنصر واحد على الأقل أو ترتيبه ، فستكون النتيجة خاطئة.
من أجل الوضوح ، دعونا ننظر إلى مثال:
دع أر1 = [1 ، 2 ، 3];
دع أر2 = [1 ، 2 ، 3];
وحدة التحكم.سجل (أر1 = = = أر2) ؛ / / صحيح
في هذا المثال ، يحتوي كلا المصفوفين على نفس العناصر [1 ، 2 ، 3] بنفس الترتيب ، وبالتالي فإن نتيجة المقارنة ستكون صحيحة.
ومع ذلك ، يجب أن تكون حذرا ، لأن عامل التشغيل === يقارن أنواع البيانات. إذا كانت المصفوفات التي تتم مقارنتها تحتوي على أنواع بيانات مختلفة ، فستكون النتيجة دائما خاطئة. على سبيل المثال:
دع أر1 = [1 ، 2 ، 3];
دع أر 2= ['1', '2', '3'];
وحدة التحكم.سجل (أر1 = = = أر2); // خطأ
في هذه الحالة ، على الرغم من أن العناصر في كلا المصفوفين قد تبدو متشابهة ، إلا أن أنواع البيانات مختلفة (رقم وسلسلة) ، وبالتالي فإن نتيجة المقارنة ستكون خاطئة.
لذلك ، عند استخدام عامل التشغيل = = = لمقارنة المصفوفات في جافا سكريبت ، تحتاج إلى التأكد من أن المصفوفات تحتوي على نفس العناصر بنفس الترتيب ولها نفس نوع البيانات لكل عنصر.
سؤال وجواب
الطريقة التي هي الأنسب لمقارنة اثنين من المصفوفات في جافا سكريبت?
جميع الطرق المذكورة أعلاه لها مزاياها وعيوبها ، ويعتمد اختيار الطريقة المثلى على المهمة والمتطلبات المحددة. إذا كنت بحاجة إلى مقارنة بسيطة من المصفوفات دون التعشيش والشيكات الإضافية ، ثم "توسترينغ()" أو "جسون.سترينجيفي () " قد تكون الأساليب المثلى. إذا كنت بحاجة إلى مقارنة المصفوفات مع التعشيش وتكون قادرة على تكوين شروط إضافية ، ثم يجب عليك أن تنظر في طريقة "إيسيكوال () l library" من مكتبة لوداش.
ما هي الطريقة التي يمكن استخدامها لمقارنة اثنين من المصفوفات إذا كان لديهم أطوال مختلفة?
إذا كان المصفوفان لهما أطوال مختلفة ، فلا يمكنك ببساطة مقارنة عناصرهما حسب الفهارس ، حيث سيحدث خطأ. طريقة واحدة لمقارنة هذه المصفوفات هي استخدام طريقة" كل ()". تتيح لك هذه الطريقة التحقق مما إذا تم استيفاء الشرط المحدد لجميع عناصر المصفوفة. في هذه الحالة ، يمكنك التحقق مما إذا كان كل عنصر من عناصر المصفوفة الأولى هو عنصر من المصفوفة الثانية أو العكس. إذا كانت طريقة" كل () " صحيحة ، فإن جميع العناصر تتطابق مع الشرط وتعتبر المصفوفات هي نفسها.