首页 文章

使用reduce来检查偶数/奇数 - 奇数的代码失败

提问于
浏览
-2

函数ev调用reduce函数洞察它并假设如果数组中的偶数(我传递给ev函数)则返回true,如果数组具有奇数则假设返回false . 我的代码适用于偶数,但是对于奇数而言则失败(显示为真)但我不知道为什么!有人知道为什么吗?

var even = function(num) {
    return num % 2 === 0;
};

function reduce(array, init, func) {
    var curr = init;
    for (var i = 0; i < array.length; i++) {
        curr = func(curr, array[i]);
    }
    return curr;
}

function ev(arr, func) {
    if (arr.length > 0) {
        if (reduce(arr, 0, func)) {
            return true;
        } else {
            return false;
        }
    }

    return true; //thats i the array is empty
}
ev([0, 11, 28], even);

1 回答

  • 0

    也许你应该在Javascript中使用内置的 map / reduce 函数?

    function isEven(val) {return !(val % 2)}
    
    function or(a, b) {return a || b}
    
    function containsEven(arr) 
    {
        return arr.map(isEven).reduce(or)
    }
    

    Edit 1:

    或者,更好的是,您可以使用偶数/奇数乘法的属性来检查以确保数组元素的乘积是偶数:

    function mult(a, b) { return a * b }
    
    function containsEven(arr)
    {
        return !(arr.reduce(mult) % 2)
    }
    

    Edit 2:

    现在我们很清楚我们想检查数组中的所有元素是否均匀,我们将得到以下代码:

    function isEven(val)
    {
        // Equivalent to val % 2 === 0
        return !(val % 2)
    }
    
    function and(a, b) {return a && b}
    
    // Checks to see if all elements in arr pass the checkFn
    function ev(array, checkFn)
    {
        return array.map(checkFn).reduce(and)
    }
    
    //can now call ev([0, 11, 28], isEven)
    

相关问题