如何统计字符串数组中含指定子串的元素个数?以male统计为例
统计数组中包含
male的元素数量 给定数组:
var arr = [ 'male01', 'woman01', 'male02', 'kid01', 'kid02', 'male06'];需要统计其中包含
male的元素数量,预期结果为3。
刚好碰到过类似的需求,给你分享几个实用的JavaScript解法,都能快速得到你想要的结果:
方法1:用filter() + includes()(直观易懂)
这是最容易理解的写法,先过滤出所有包含male的元素,再取过滤后数组的长度:
var arr = [ 'male01', 'woman01', 'male02', 'kid01', 'kid02', 'male06']; const maleCount = arr.filter(item => item.includes('male')).length; console.log(maleCount); // 输出:3
filter()会生成一个新数组,只保留满足条件的元素,这里的条件就是元素包含male,最后通过.length直接拿到数量。
方法2:用reduce()累加计数(更高效)
如果不想额外创建新数组,reduce()是更好的选择,直接在遍历过程中累加计数:
var arr = [ 'male01', 'woman01', 'male02', 'kid01', 'kid02', 'male06']; const maleCount = arr.reduce((count, item) => { return item.includes('male') ? count + 1 : count; }, 0); console.log(maleCount); // 输出:3
这里把初始计数设为0,每遍历一个元素就判断是否包含male,符合条件就把计数加1,最终得到总数。
方法3:传统for循环(兼容性拉满)
如果需要兼容非常老旧的JavaScript环境(比如不支持ES6语法的浏览器),可以用最基础的for循环:
var arr = [ 'male01', 'woman01', 'male02', 'kid01', 'kid02', 'male06']; let maleCount = 0; for (let i = 0; i < arr.length; i++) { if (arr[i].includes('male')) { maleCount++; } } console.log(maleCount); // 输出:3
手动初始化计数器,逐个遍历数组元素判断,兼容性最好,适合所有JS运行环境。
小提示
如果需要区分大小写(比如要严格区分Male和male),可以先把元素统一转成小写或大写再判断,比如:
// 统一转小写后判断 item.toLowerCase().includes('male')
内容的提问来源于stack exchange,提问作者Hugo LOPEZ
相关产品推荐
相关产品推荐

