以下是练习的链接: 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
};
答案 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