如何在TypeScript数组中过滤掉字符串形式的数字?
解决TypeScript过滤数组中字符串形式数字的问题
原代码的判断逻辑完全搞反了,再加上parseInt(k) == k的隐式类型转换,导致数字字符串被保留下来,和预期结果完全相反。
正确实现方式
要过滤掉纯数字形式的字符串,我们需要筛选出不是纯数字格式的元素,这里推荐用正则表达式精准匹配纯数字字符串:
const arr = ['1', '2', 'apple']; // 过滤所有由纯数字组成的字符串 const result = arr.filter(k => !/^\d+$/.test(k)); console.log('result = ', result); // 输出: ["apple"]
逻辑说明
/^\d+$/是正则表达式:^匹配字符串开头,\d+匹配一个或多个数字,$匹配字符串结尾,整体用来识别完全由数字构成的字符串。!取反后,filter会只保留不满足纯数字条件的元素,也就是我们需要的非数字字符串。
另一种简化实现(适用于无特殊格式场景)
如果数组里没有空字符串这类特殊元素,也可以用Number转换结合Number.isNaN判断:
const result = arr.filter(k => Number.isNaN(Number(k)));
这种方式会保留无法转换为有效数字的字符串,也能得到预期结果,但正则的方式更精准,能避免空字符串''被误判为数字(Number('')返回0,不会被过滤)的问题。
内容的提问来源于stack exchange,提问作者me-me
相关产品推荐
相关产品推荐

