基于非字母数字字符数量对字符串数组分组的程序开发需求
解决方案:按非字母数字字符数量分组字符串数组
这是个很明确的分组需求,我直接给你一个符合要求的JavaScript实现,附带详细解释:
实现代码
function groupByNonAlphanumericCount(strings) { // 初始化结果对象 const result = {}; strings.forEach(str => { // 统计当前字符串中非字母数字字符的数量 // 正则匹配所有非a-z/A-Z/0-9的字符,没有匹配项时用空数组避免null报错 const nonAlnumCount = (str.match(/[^a-zA-Z0-9]/g) || []).length; // 生成对应的键名,比如count0、count1 const key = `count${nonAlnumCount}`; // 如果对象中还没有这个键,先初始化空数组 if (!result[key]) { result[key] = []; } // 将当前字符串加入对应分组 result[key].push(str); }); return result; } // 测试你的输入示例 const list = ['1','1.2','1.2.3','1.23.4','1.4','11','33.44.55.66.99','ab.cd.ed.df']; const output = groupByNonAlphanumericCount(list); console.log(output);
代码解释
- 正则匹配逻辑:
/[^a-zA-Z0-9]/g是一个全局正则表达式,^在方括号内表示“非”,所以会匹配所有不是大小写字母和数字的字符。 - 处理无匹配的情况:如果字符串里没有非字母数字字符,
str.match()会返回null,所以我们用|| []把它转成空数组,这样length就是0,避免报错。 - 分组逻辑:遍历每个字符串时,先计算非字母数字字符的数量,生成对应的键名,然后把字符串添加到对应分组的数组中——如果分组不存在,就先创建一个空数组。
测试结果
运行上面的代码后,输出和你给出的示例完全一致:
{ count0: ['1', '11'], count1: ['1.2', '1.4'], count2: ['1.2.3', '1.23.4'], count3: ['ab.cd.ed.df'], count4: ['33.44.55.66.99'] }
内容的提问来源于stack exchange,提问作者Sam Jay
相关产品推荐
相关产品推荐

