使用isEqual判断二维数组行元素全相等时结果异常的问题
问题分析与修复
你的代码存在几个关键问题,导致所有行都被错误判定为元素全相等:
1. 判断函数逻辑错误
isEqual函数里用了赋值操作currentValue = 5,而非比较操作currentValue === 5。更核心的问题是,这个函数的逻辑偏离需求——你要判断的是一行内所有元素相等,而非所有元素固定等于5。正确逻辑应该是让每个元素和该行第一个元素对比。
2. 变量赋值与声明错误
const r = 0是常量,无法重新赋值,应改为let r = 0;r == i + 1是比较运算符,不是赋值操作,要写成r = i + 1。
3. 输出语句位置错误
你把console.info放在循环最外层,不管result是否为true都会执行,导致所有行都输出提示。应该把输出放在if(result == true)的代码块内。
4. 循环变量未声明
循环中的i没有用let声明,会变成全局变量,不符合代码规范。
修正后的代码
const isEqual = (currentValue, _, arr) => currentValue === arr[0]; let r = 0; const array = [ [1,2,3,4], [5,5,5,5], [6,7,8,9], [10,11,12,13] ]; for (let i = 0; i < array.length; i++) { const result = array[i].every(isEqual); if (result) { r = i + 1; console.info(`Row ${r} has all equal values.`); } }
代码解释
isEqual函数利用every方法的第三个参数arr(当前遍历的数组),让每个元素和数组第一个元素对比,实现“所有元素相等”的判断;- 用
let声明r和i,保证变量作用域正确; - 把输出语句移到if条件内,仅当行内元素全相等时才输出;
- 使用模板字符串
${r}让代码更简洁。
运行修正后的代码,会输出预期结果:
Row 2 has all equal values.
内容的提问来源于stack exchange,提问作者Tempted Fate
相关产品推荐
相关产品推荐

