javascript - 谁能帮我理解 Leetcode 自除数练习的解决方案
问题描述
这是练习的链接: 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
};
解决方案
.map((integer) => integer !== 0 && number % integer === 0)
这将检查整数数组中的单个整数是否不为 0(因为 SDN 不能包含 0)以及该数字是否可以被整数自整除。这个解释正确吗?
正确的。
如果我们在调用第二个 map 方法后返回它,数组会是什么样子?
这将是一组真值或假值,每个值取决于您在上面解释的条件。
至于reduce方法,我完全迷路了。为什么使用它?
reduce 方法获取真或假值的数组,然后将它们全部按顺序排列。这将返回单个真值或假值,本质上表示“所有值都为真吗?”的问题。
作为reduce
解释的扩展,reduce 需要一个带有两个参数的回调函数;以前的值和当前值。此外,previous 的第一个值可能有一个种子(在您的示例中未使用)。然后reduce将迭代并将前一个值和当前值注入回调函数,使用返回作为下一个前一个值。
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
推荐阅读
- string - ifelse grep gsub 回收留下剩余警告,R
- python - 在 matplotlib 中显示小的标准偏差
- java - java中对象实例的线程范围
- swift - Switch Case Cast 模式匹配
- javascript - 从 Nodejs 服务器端调用 javascript 函数
- python - 基于多个条件过滤列表
- javascript - 使用终端输出的 writeFile 函数
- arduino - 将 Arduino 串行输入拆分为多个字符串
- python - Python 3的列表索引超出范围错误
- python - 文本小部件上的 Python Tkinter ttk 滚动条不缩放