有人可以帮助我了解Leetcode的自除数练习的解决方案

时间:2019-08-28 22:42:14

标签: javascript

以下是练习的链接: https://leetcode.com/problems/self-dividing-numbers/

我有代码,但是在调用第一个map方法后无法理解如何解释它。

.map((integer) => integer !== 0 && number % integer === 0) 这将检查整数数组中的单个整数是否不为0(因为SDN不能包含0)以及该数字是否可被整数整除。这个解释正确吗?如果我们在调用第二个map方法之后返回它,数组会是什么样?

关于reduce方法,我完全迷失了。为什么使用它?

谢谢

var SDN = function(number) {

    // change number to string
    // use split to get number string to be an array of integers as strings
    // map(Number) to change array of strings to array of numbers

    return number.toString()
                .split('')
                .map(Number)
                .map((integer) => integer !== 0 && number % integer === 0)
                .reduce((a,b) => a && b)
}

var selfDividingNumbers = function(left, right) {
    let res = []
    for(let i = left; i <= right; i++) {
        if(SDN(i)) {
            res.push(i)
        }
    }
    return res
};

1 个答案:

答案 0 :(得分:1)

  

.map((integer) => integer !== 0 && number % integer === 0)这将检查整数数组中的单个整数是否不为0(因为SDN不能包含0)以及该数字是否可被整数整除。这个解释正确吗?

正确。

  

如果调用第二个map方法后将其返回,该数组将是什么样?

它将是一个true或false值的数组,每个值都取决于您在上面说明的条件。

  

关于reduce方法,我完全迷失了。为什么使用它?

reduce方法采用真值或假值数组,然后按顺序将其全部包含。这将返回一个true或false值,本质上表示一个问题“所有值都是true吗?”。


作为对reduce解释的扩展,reduce期望一个带有两个参数的回调函数。先前值和当前值。此外,previous的第一个值可能有一个种子(在您的示例中未使用)。然后reduce将迭代并将先前的值和当前值注入到回调函数中,并使用return作为下一个先前的值。

reduce(function(previous, current){ ... }, optionalSeedForFirstPrevious)

使用您给出的示例,这意味着a是前一个值,而b是当前值。箭头函数每次都返回a && b的结果。

因此,如果您有[true, false, true],则意味着reduce本质上将评估为

iteration1 = true && false;
iteration2 = iteration1 && true;
return iteration2; //false

如果您有[true, true, true],则意味着reduce实际上将评估为

iteration1 = true && true;
iteration2 = iteration1 && true;
return iteration2; //true

有关reduce, visit the Mozilla Developers Network的更多信息。