使用 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
来找到解决这个问题的方法。以下是 every
和 reduce
的片段
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]))
我正在尝试解决以下问题:
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
来找到解决这个问题的方法。以下是 every
和 reduce
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]))