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 比较是在前两个索引之间).

第一个测试比较00所以第二个测试比较true0,所以第三个测试比较falsefalse 等等。


当你 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#reducereturn一个值,和你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