Я пытаюсь выяснить, почему в моей функции-редукторе isTrue может переключаться на true
с false
, но не обратно на false
при обнаружении функции, которая возвращает false.Я просто пытаюсь понять, почему это может перевернуться в одну сторону, а не в другую.
Я знаю, что переворот происходит в return isTrue || val(num);
Направления были "// определяют функцию" passOne ", которая принимает два аргумента, первый - любое значение, а второй - массив функций.Эти функции могут рассматриваться как тесты, так как все они будут возвращать либо true, либо false. «PassOne» будет выполнять итерацию / цикл по массиву и передавать значение каждой функции в качестве аргумента. Если хотя бы одна функция (test) возвращает true,«passOne» вернет true. Если ни одна из функций не вернет true, «passOne» вернет false. // используйте ваш «passOne», чтобы определить, является ли число 113 отрицательным, даже, ИЛИ имеет 1 в качестве первой цифры. Затем проверьте213. "
Я пытался визуализировать это в Python Tutor.
function isNeg(num){
return num < 0 ? true: false;
}
function isEven(num){
return num % 2 === 0 ? true : false;
}
function oneDig(num){
return (num.toString())[0] === `1` ? true : false;
}
const funcs = [oneDig, isNeg, isEven];
// refactor "passOne" so that it uses the built-in "reduce" method instead of a "for" loop
function passOne(num, arr){
return arr.reduce((isTrue, val) => {
return isTrue || val(num);
}, false);
}
console.log(passOne(113, funcs)); //true
console.log(passOne(213, funcs)); //false
код работает должным образом, я просто не понимаю, почему обратные вызовы, которые возвращают «ложь», не переворачивают isTrue обратно на «ложь», как он остается?true, а затем не обновлять до false, не то, что в инструкциях сказано делать, мне просто любопытно.