Javascript reduce() - 为什么返回 false?
Javascript reduce() - why is this returning false?
基本上,我想评估数组中的所有项目。如果每个项目的类型和值都相同(严格相等检查)return true,否则 return false。
我在这里错过了什么? - 谢谢!
function equalityChecker(arr) {
return arr.reduce((prev, curr) => {
if (prev !== curr) {
return false;
}
if (prev === curr) {
return true;
}
});
}
console.log(equalityChecker([0,0,0,0,0,0])); //returns false
console.log(equalityChecker([1,1,1,1,1,1])); //returns false
reduce
比较前次测试的结果与当前指数.
它不会将之前的索引与当前索引进行比较。
(例外情况是如果您没有将值作为第二个参数传递给 reduce
,在这种情况下 first 比较是在前两个索引之间).
第一个测试比较0
和0
所以第二个测试比较true
和0
,所以第三个测试比较false
和false
等等。
当你 debugged 这样做时,你应该添加日志记录,它会告诉你发生了什么。
function equalityChecker(arr) {
console.log(arr);
return arr.reduce((prev, curr) => {
console.log(`prev: ${prev}, curr: ${curr}`);
if (prev !== curr) {
return false;
}
if (prev === curr) {
return true;
}
});
}
console.log(equalityChecker([0, 0, 0, 0, 0, 0])); //returns false
console.log(equalityChecker([1, 1, 1, 1, 1, 1])); //returns false
Array#reduce
return一个值,和你return一个比较的结果。
在下一次迭代中,您将使用此布尔值并检查数组中的值。
提示 1:Reduce 不适用于此方法。
另一个缺点是迭代长度,尽管有 false
结果,它仍对所有元素进行循环。
提示 2:你需要一个 return 早的方法。
结果:取 Array#every
并将每个元素与第一项进行比较。
function equalityChecker(array) {
return array.every((value, _, [first]) => first === value);
}
console.log(equalityChecker([0, 0, 0, 0, 0, 0])); // true
console.log(equalityChecker([1, 1, 1, 1, 1, 1])); // true
console.log(equalityChecker([0, 0, 0, 1, 0, 0])); // false
基本上,我想评估数组中的所有项目。如果每个项目的类型和值都相同(严格相等检查)return true,否则 return false。 我在这里错过了什么? - 谢谢!
function equalityChecker(arr) {
return arr.reduce((prev, curr) => {
if (prev !== curr) {
return false;
}
if (prev === curr) {
return true;
}
});
}
console.log(equalityChecker([0,0,0,0,0,0])); //returns false
console.log(equalityChecker([1,1,1,1,1,1])); //returns false
reduce
比较前次测试的结果与当前指数.
它不会将之前的索引与当前索引进行比较。
(例外情况是如果您没有将值作为第二个参数传递给 reduce
,在这种情况下 first 比较是在前两个索引之间).
第一个测试比较0
和0
所以第二个测试比较true
和0
,所以第三个测试比较false
和false
等等。
当你 debugged 这样做时,你应该添加日志记录,它会告诉你发生了什么。
function equalityChecker(arr) {
console.log(arr);
return arr.reduce((prev, curr) => {
console.log(`prev: ${prev}, curr: ${curr}`);
if (prev !== curr) {
return false;
}
if (prev === curr) {
return true;
}
});
}
console.log(equalityChecker([0, 0, 0, 0, 0, 0])); //returns false
console.log(equalityChecker([1, 1, 1, 1, 1, 1])); //returns false
Array#reduce
return一个值,和你return一个比较的结果。
在下一次迭代中,您将使用此布尔值并检查数组中的值。
提示 1:Reduce 不适用于此方法。
另一个缺点是迭代长度,尽管有 false
结果,它仍对所有元素进行循环。
提示 2:你需要一个 return 早的方法。
结果:取 Array#every
并将每个元素与第一项进行比较。
function equalityChecker(array) {
return array.every((value, _, [first]) => first === value);
}
console.log(equalityChecker([0, 0, 0, 0, 0, 0])); // true
console.log(equalityChecker([1, 1, 1, 1, 1, 1])); // true
console.log(equalityChecker([0, 0, 0, 1, 0, 0])); // false