JS代码.split(' ').filter(e => e.trim().length).join('-')中filter回调有什么作用
filter回调函数逻辑说明
你贴的整段代码常用来把空格分隔的字符串转成短横线连接的格式,核心过滤逻辑的执行规则如下:
// 整段代码链路:字符串按空格切分 → 过滤无效内容 → 用短横线拼接 目标字符串.split(' ').filter(e => e.trim().length).join('-')
filter是数组的原生过滤方法,规则很简单:遍历切分后生成的数组每一项,回调函数返回真值的项会被保留,返回假值的项直接剔除。- 箭头函数
e => e.trim().length就是传入filter的判断回调,入参e是split(' ')切出来的每一个子串,执行逻辑没有绕弯:- 先对当前子串执行
e.trim(),清掉子串首尾所有空白字符(包括普通空格、换行、制表符等) - 读取清完空白后字符串的
length属性,也就是处理后字符串的实际字符长度 - 直接把这个长度值当回调返回值传给filter:如果长度是0,说明当前项是没实际内容的空串,属于JS里的假值,直接过滤掉;如果长度大于0,说明当前项是有效内容,属于真值,保留下来。
- 先对当前子串执行
回调的实际作用
专门处理
split(' ')切分字符串的天生缺陷:如果原字符串首尾带空格、中间有连续多个空格,直接按单个空格切分会生成一堆内容为空的数组项,不加这个过滤的话,最后join拼短横线的时候,会出现首尾带横杠、中间连续好几个横杠的错误结果。
给个实际运行的例子就很清楚:
- 测试用原字符串:
" hello stack overflow " - 执行
split(' ')得到的原始数组:['', '', 'hello', '', '', 'stack', 'overflow', '', ''] - 经过这个回调过滤后的有效数组:
['hello', 'stack', 'overflow'] - 最后join得到的正确结果:
hello-stack-overflow
内容的提问来源于stack exchange,提问作者syedsalman hassan
相关产品推荐
相关产品推荐

