首页 > 解决方案 > 使用数组方法时在哪里使用附加条件

问题描述

我试图解决以下问题:

编写一个函数,如果所有数组元素都为真,则返回真。使用减少

这是我制定的解决方案

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])

任何解释将不胜感激,谢谢

标签: javascriptarraysreduce

解决方案


您的代码不起作用的原因是,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]));


推荐阅读