تحدي النار: لدى Falsy Bouncer مشكلة.
وكيل المستخدم هو: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36
.
تشير التعليمات إلى Falsy Bouncer إلى أن القيمة Falsy من أنواع مختلفة بما في ذلك NaN .
يتطلب الاختبار الأول أن تعيد وظيفة استدعاء الحارس ([7، "ate"، ""، false، 9]) [7، "ate"، 9]
ومع ذلك ، لاحظ أن السلسلة "ate" هي NaN لذلك لا يجب تضمينها في المصفوفة الناتجة.
لذلك يبدو أنه لا توجد طريقة لاجتياز الاختبار 1 والاختبار 3 بنفس كتلة الكود ، فهما إجابات متعارضة.
رمز بلدي:
function bouncer(arr) {
arr = arr.filter(function(val){
if (val === false || val === null || val === undefined || val === "" || val === 0 || isNaN(val)) return false;
return true;
});
return arr;
}
bouncer([false, null, 0, NaN, undefined, ""]);
أعتذر مقدمًا إذا كنت قد أسأت فهم شيء ما هنا.
NaN
هي القيمة الفعلية التي يمكن أن يمتلكها المتغير وهي خاطئة. "ate"
ليس رقمًا و isNan("ate")
سيعود صحيحًا ، لكن القيمة "ate"
ليست خاطئة ، فقط القيمة المحددة لـ NaN
خاطئة. إن جمال القيم الخاطئة (ومصدرها العرضي) هو أنك لست بحاجة إلى البحث عنها صراحة كما تفعل التعليمات البرمجية الخاصة بك ، لأنه كلما كانت هناك حاجة إلى قيمة منطقية ، فإن جافا سكريبت ستكتبها إلى قيمة منطقية خطأ. ما يعنيه هذا هو أن رمز وظيفة التصفية الخاص بك يمكن أن يكون ببساطة:
arr = arr.filter(function(val){
return val;
});
شكرا وترميز سعيد!
ومن الناحية الفنية ، يمكنك استخدام الدالة Boolean
للقيام بذلك نيابةً عنك ، بحيث يمكن حل المشكلة:
return arr.filter(Boolean)
، نظرًا لأن Boolean تأخذ قيم صواب / خطأ وتعيد صواب أو خطأ.
التعليق الأكثر فائدة
ومن الناحية الفنية ، يمكنك استخدام الدالة
Boolean
للقيام بذلك نيابةً عنك ، بحيث يمكن حل المشكلة:return arr.filter(Boolean)
، نظرًا لأن Boolean تأخذ قيم صواب / خطأ وتعيد صواب أو خطأ.