使用 Array 方法时在哪里使用附加条件

Where to use additional condition when using Array methods

我正在尝试解决以下问题:

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,但它在下一次迭代中稍后被修改

例如下面的测试应该 return false 但是 returns true

allTrue([false, true])

如有解释,将不胜感激

我认为这可以帮助:

function allTrue(values) {
  return values.reduce((final, value) => final && value)
}

您的代码不起作用的原因是 reduce 只是 return 数组中 last 元素的比较结果true。由于 [false, true] 中的最后一个元素是 true,它 returns true.

请注意,您的代码过于复杂,您已经有效地将条件包含在 reduce 中(给出 true 的初始值意味着 zero-length 数组将 return true)。你的一个问题是 reduce 中的代码不正确,你应该检查 all 以前的值是否是 true 以及'ing 当前值与所有先前值的和:

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

我们也可以使用 every 来找到解决这个问题的方法。以下是 everyreduce

的片段

var allTrue_Every = (arr) => arr.every(d => d == true)

console.log(allTrue_Every([true, true]))
console.log(allTrue_Every([true, false]))

var allTrue_Reduce = (arr) => arr.reduce((r, d) => r && d, true)


console.log(allTrue_Reduce([true, true]))
console.log(allTrue_Reduce([true, false]))