我正在尝试解决以下问题:
编写一个函数,如果所有数组元素都为true,则返回true。使用减少
这是我制定的解决方案
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中处理最终结果,但稍后在下一个迭代中对其进行了修改
例如,以下测试应返回false,但返回true
allTrue([false, true])
任何解释将不胜感激,谢谢
您的代码无法正常工作的原因是,该代码reduce
仅返回数组中最后一个元素与的比较结果true
。由于中的最后一个元素[false, true]
是true
,它返回true
。
请注意,您的代码过于复杂,您已经将条件有效地包含在中reduce
(给出初始值true
表示零长度数组将返回true
)。您的一个问题是中的代码reduce
不正确,您应该通过将当前值与和的所有先前值相加来检查所有先前的值是否true
与当前值相同:
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]));
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句