【问题标题】:Using reduce to check for even/odd numbers- code fails for odd num使用reduce检查偶数/奇数-奇数代码失败
【发布时间】:2016-09-16 20:48:44
【问题描述】:

函数ev调用reduce函数insight它并且假设如果数组中有偶数(我将其传递给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);

【问题讨论】:

  • 您的问题无法阅读。
  • 我刚刚意识到reduce是将数字相加然后检查真假我认为..我怎样才能使用reduce函数(我必须使用它来进行练习)但不是添加它们但单独检查每个数字?
  • 怎么看不懂?

标签: javascript reduce


【解决方案1】:

也许你应该在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)
}

编辑 1:

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

function mult(a, b) { return a * b }

function containsEven(arr)
{
    return !(arr.reduce(mult) % 2)
}

编辑 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)

【讨论】:

  • 这里的重点是我需要单独检查每个元素的奇数/偶数,但仍然使用 reduce 函数
  • 那么我的第一个解决方案应该可以满足您的要求。
  • hmm 我必须使用两个参数调用 ev 函数,例如 ev([0, 11, 28], even);如果我使用您的解决方案,我不确定该怎么做:/
  • 谢谢。我试过了,但它仍然不起作用 - 我仍然对奇数正确
  • 好的,所以我们需要在这里重新审视您的目标。你说如果有偶数它应该返回true,如果有奇数则返回false。这些条件仅在列表包含所有赔率或所有偶数时才有效,对于同时包含偶数和赔率的列表来说,这将是自相矛盾的。
猜你喜欢
  • 2019-05-10
  • 2016-04-21
  • 1970-01-01
  • 2015-05-31
  • 1970-01-01
  • 1970-01-01
  • 2011-11-12
  • 1970-01-01
  • 2021-02-02
相关资源
最近更新 更多