如何在TypeScript中检查数组元素是否全部相同
TypeScript判断数组所有元素是否相同的问题修复
原代码存在的问题
- 类成员变量
newArr会被多次调用的checkVal持续修改,导致状态污染,无法正确对应每次传入的数组 - 判断逻辑错误:
if(this.newArr)永远为真(数组对象在JS/TS中始终是真值,无论是否为空),所以只会触发第一个弹窗 - 核心判断逻辑缺失:没有实现检查数组元素是否全部相同的逻辑
修正后的实现方案
方案一:使用every方法(性能更优)
arr1 = ['1256','1256','1256']; arr2 = ['1256','8259','1256']; checkVal(val: string[]) { // 处理空数组边界情况 if (val.length === 0) { alert("数组为空"); return; } // 检查所有元素是否与第一个元素相等 const allElementsSame = val.every(item => item === val[0]); alert(allElementsSame ? "数组中所有元素都相同" : "数组中存在不同的元素"); } checkValApply1() { this.checkVal(this.arr1); } checkValApply2() { this.checkVal(this.arr2); }
方案二:利用Set去重特性
arr1 = ['1256','1256','1256']; arr2 = ['1256','8259','1256']; checkVal(val: string[]) { if (val.length === 0) { alert("数组为空"); return; } // Set自动去重,若去重后长度为1则所有元素相同 const uniqueSet = new Set(val); alert(uniqueSet.size === 1 ? "数组中所有元素都相同" : "数组中存在不同的元素"); } checkValApply1() { this.checkVal(this.arr1); } checkValApply2() { this.checkVal(this.arr2); }
关键说明
原代码中依赖类成员变量newArr的逻辑完全错误:每次调用checkVal都会向newArr中push元素,导致变量状态持续累积,且判断数组是否为真的逻辑不具备任何判断元素是否相同的能力。修正后的方案直接针对传入的数组进行处理,不依赖全局状态,逻辑清晰且符合需求。
内容的提问来源于stack exchange,提问作者EMahan K
相关产品推荐
相关产品推荐

