我试图解决以下问题:
Write a function that returns true if all array elements are true. Use reduce
这是我提出的解决方案
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
通过将当前值与所有先前值进行“与”运算来计算当前值:
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]));
关于javascript - 使用数组方法时在哪里使用附加条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64112925/