javascript - 使用数组方法时在哪里使用附加条件
问题描述
我试图解决以下问题:
编写一个函数,如果所有数组元素都为真,则返回真。使用减少
这是我制定的解决方案
function allTrue(values) {
if ( values[0] === false) return false
if (values.length === 0) return true
let result = values.reduce( (final, value) => final = value === true, true)
return result ? true : false
}
我的问题是,是否可以将外部条件移动到 reduce 方法的主体中。
换句话说,如果我需要使用单个reduce方法来解决它,我可以实现它吗?
我尝试在 reduce 中操作final,但在下一次迭代中稍后会对其进行修改
例如下面的测试应该返回false但返回 true
allTrue([false, true])
任何解释将不胜感激,谢谢
解决方案
您的代码不起作用的原因是,reduce
唯一返回数组中最后一个元素与true
. 由于最后一个元素[false, true]
是true
,它返回true
。
请注意,您的代码过于复杂,您已经有效地将条件包含在reduce
(给出初始值true
意味着零长度数组将返回true
)。您的一个问题是 中的代码reduce
不正确,您应该检查所有先前的值是否true
与当前值一样,通过将当前值与所有先前值的 and 相结合:
const allTrue = (values) => values.reduce((curr, value) => curr && value, true);
console.log(allTrue([]));
console.log(allTrue([true]));
console.log(allTrue([false]));
console.log(allTrue([true, true, true]));
console.log(allTrue([false, true]));
推荐阅读
- java - 在 Spring Boot 2.0 / Hibernate 5 中获取 SessionFactory
- android - osmdroid 标记信息窗口在聚类标记后不显示
- php - 路由在调用控制器方法之前重定向
- android - 在领域数据库中保存数据时出错
- regex - 正则表达式的否定
- c - 消费者-生产者 - MPI
- dart - 当应用程序加载时,默认路由('/')是否会添加到导航器堆栈中
- linux - 使用 sed 或 awk 提取两个单词之间的数据
- dart - 如何删除 RadioListTile 上的内部填充,以便可以连续使用 3 个 RadioListTiles?
- python - 在张量流中重塑一批具有动态最大长度的张量