"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية الخروج قبل الأوان من حلقة forEach في Node.js؟

كيفية الخروج قبل الأوان من حلقة forEach في Node.js؟

تم النشر بتاريخ 2024-11-08
تصفح:902

How to Prematurely Exit a forEach Loop in Node.js?

كيفية مقاطعة Node.js forEach Loop

في المواقف التي تحتاج فيها إلى اجتياز هياكل البيانات المتداخلة بشكل متكرر وتنفيذ عملية لكل عنصر، يمكنك استخدام مزيج من العودية وforEach. ومع ذلك، قد تكون هناك حالات تحتاج فيها إلى الخروج من حلقة forEach قبل الأوان.

على عكس الحلقة العادية التي تحتوي على عبارات Break أو continue، تفتقر forEach إلى آلية مدمجة لوقف تكرارها. لمحاكاة هذا السلوك، دعونا نستكشف ثلاث طرق:

1. الطريقة "القبيحة": استخدام منطقية سياقية

قم بتمرير وسيطة ثانية إلى forEach كسياق وقم بتخزين قيمة منطقية فيها. داخل وظيفة رد الاتصال، تحقق من القيمة المنطقية وقم بالانفصال إذا لزم الأمر. هذا الأسلوب غير جذاب بصريًا.

function recurs(comment) {
    var stop = false;
    comment.comments.forEach(function (elem) {
        recurs(elem);
        if (...) stop = true;
    }, stop);
}

2. الطريقة "المثيرة للجدل": معالجة الاستثناءات

قم بإحاطة حلقة forEach داخل كتلة محاولة الالتقاط. عندما تريد الإيقاف، قم بطرح استثناء والتقطه خارج الحلقة. يمكن أن يؤثر هذا الأسلوب على الأداء وقد يثير مخاوف بشأن إمكانية قراءة التعليمات البرمجية.

try {
    comment.comments.forEach(function (elem) {
        recurs(elem);
        if (...) throw new Error("Stop Iteration");
    });
} catch (e) {
    if (e.message === "Stop Iteration") return;
}

3. الطريقة "الممتعة": يعد استخدام every()

every() خيارًا أفضل. ويستمر في التكرار عبر المجموعة حتى تقوم وظيفة رد الاتصال بإرجاع خطأ. يعمل هذا بشكل فعال بمثابة بيان فاصل.

comment.comments.every(function (elem) {
    recurs(elem);
    if (...) return false;
    return true;
});
يمكنك أيضًا استخدام some() بدلاً من every() إذا كنت تفضل إرجاع true للكسر.

بيان الافراج يتم استنساخ هذه المقالة في: 1729171158 إذا كان هناك أي انتهاك ، فيرجى الاتصال بـ [email protected] لحذفه.
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3