如何检查二维数组中各子数组的首元素与尾元素是否相等
问题分析
- 变量名不匹配:声明的数组变量名为
array,遍历时调用的是arr,运行时会抛出ReferenceError: arr is not defined错误 - forEach方法返回值无效:
forEach本身没有返回值,且在forEach回调中执行return只会跳出当前次回调,既无法终止整个遍历流程,也不能将判断结果返回到外层作用域 - 逻辑不符合需求:需求是验证所有子数组都满足首尾元素相等,现有逻辑只要遇到一个满足条件的子数组就返回true,完全不匹配需求;且现有代码只判断
el[0] === el[1],默认子数组长度为2,若子数组长度大于2,无法正确取到末尾元素,应该用el[el.length - 1]获取子数组的最后一个元素 - 缺少边界兼容:没有适配子数组为空的场景,若子数组长度为0,取
el[0]和el[el.length-1]都会得到undefined,可根据业务需要调整判断规则
正确实现
如果需求是判断所有子数组的首尾元素都相等,直接使用Array.prototype.every方法即可,该方法会遍历所有元素,只有所有元素都满足判断条件时才会返回true:
const array = [[1, 2], [3, 3]]; const allSubArrMatch = array.every(el => { // 这里默认空数组视为不满足条件,可根据实际业务调整规则 if (el.length === 0) return false; return el[0] === el[el.length - 1]; }); console.log(allSubArrMatch); // 输出 false,因为第一个子数组[1,2]首尾元素不相等
如果需求是筛选出所有首尾元素相等的子数组,使用Array.prototype.filter方法:
const array = [[1, 2], [3, 3], [2, 5, 2]]; const matchedSubArr = array.filter(el => { if (el.length === 0) return false; return el[0] === el[el.length - 1]; }); console.log(matchedSubArr); // 输出 [[3, 3], [2, 5, 2]]
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

