如何让Array.includes()判断时不区分值的字符串、数字类型
问题原因
Array.prototype.includes 底层采用严格相等规则(===)做匹配,数字1和字符串"1"类型不同,因此判定为不相等,返回false。
解决方案
- 方案1:统一转换类型后匹配
把数组所有元素和待匹配值都转为同一种类型(字符串或数字)后再调用includes,适合需要复用转换后数组的场景:let exceptLayers: (string | number)[] = [1,2]; let n = "1"; // 统一转成字符串后判断 let v = exceptLayers.map(item => String(item)).includes(String(n)); console.log(v); // 输出 true - 方案2:用
some方法自定义匹配规则
无需修改原数组,直接自定义匹配逻辑,大数组场景下性能更优:let exceptLayers: (string | number)[] = [1,2]; let n = "1"; // 方式1:统一转字符串对比,逻辑更可控 let v = exceptLayers.some(item => String(item) === String(n)); // 方式2:直接用宽松相等==,代码更简洁,确认无其他边界类型时可使用 // let v = exceptLayers.some(item => item == n); console.log(v); // 输出 true
内容的提问来源于stack exchange,提问作者user15423370
相关产品推荐
相关产品推荐

