JavaScript substr, substring, slice与splice操作详解及区别

0 下载量 100 浏览量 更新于2024-09-02 收藏 61KB PDF 举报
在JavaScript中,字符串操作是编程时经常用到的重要部分,其中substr(), substring(), 和 slice() 是三种常用的字符串处理函数,它们各有特点并适用于不同的场景。让我们逐一解析它们: 1. substr() 方法: substr() 函数用于从给定的字符串中提取指定长度的字符,其语法是 `stringObject.substr(start, length)`。start 参数是必需的,表示从哪个下标(从0开始计数)开始截取,可以是正数,如0、1、2等,也可以是负数,-1代表倒数第一个字符,-2代表倒数第二个,以此类推。length 是可选的,表示要截取的字符数量,如果未提供,则从 start 开始一直截取到字符串结束。需要注意的是,substr() 方法在 ECMAScript 标准化上存在争议,不推荐在严格的代码中使用。 2. substring() 方法: substring() 与 substr() 类似,但它的 start 参数是必需的,而 end 参数是可选的。start 也是从0开始的下标,必须是非负整数,但 W3C 规范允许非整数输入。如果没有提供 end,substring() 将截取从 start 到字符串结尾的所有字符。值得注意的是,substring() 截取的长度为 end-start,且 end 不包含在内,例如 `substring(0, 5)` 会得到从索引0到4的字符,不包括索引5的字符。 3. slice() 方法: slice() 提供了更大的灵活性,它接受两个参数:start 和 end。start 与 substr() 和 substring() 相同,可以是正数或负数。end 是可选的,如果不提供,slice() 将截取从 start 到字符串结束的子串。负数参数在此处同样表示从字符串尾部开始计算的位置。例如,`slice(-2)` 表示从倒数第二个字符开始截取。 4. splice() 方法: splice() 方法是用于操作数组的方法,而非字符串,但它可以用于修改数组内容。它接受三个参数:index(必填),表示插入或删除的起始位置;howmany(必填),表示要删除的元素数量(如果为0则不删除);element1, ..., elementX(可选),表示插入的新元素。splice() 可以用来插入、删除或替换数组中的元素,对数组的结构进行动态操作。 总结来说,substr(), substring(), 和 slice() 都是用于获取字符串子串的方法,但它们的参数处理方式和应用场景略有不同。substr() 适合明确指定长度的截取,substring() 更灵活,可以只提供一个参数来截取到末尾,而 slice() 对于数组操作提供了额外的功能。在选择使用时,应根据实际需求考虑参数的可选性和行为细节。由于 substr() 的标准化问题,建议优先考虑使用 substring() 或 slice()。

select a.IMSI, a.GJ, a.YYS, count(case when substr(b.IMSI,1,5)<>46000 and b.operate_code=2 then a.IMSI else null end) as MRWZGXQQCS, count(case when substr(b.IMSI,1,5)<>46000 and b.operate_code=2 and b.result<>1 then a.IMSI else null end) as MRWZGXQQCS, case when count(case when substr(b.IMSI,1,5)<>46000 and b.operate_code=2 then a.IMSI else null end)=0 then 0 else count(case when substr(b.IMSI,1,5)<>46000 and b.operate_code=2 and b.result<>1 then a.IMSI else null)/ count(case when substr(b.IMSI,1,5)<>46000 and b.operate_code=2 then a.IMSI else null end) as MRWZGXCGL, sum(c.MRZJCS) as MRZJCS, sum(c.MRZJHJCGCS) as MRZJHJCGCS, sum(d.MRBJCS) as MRBJCS, sum(d.MRBJHJCGCS) as MRBJHJCGCS, case when sum(c.MRZJCS)=0 then 0 else sum(c.MRZJHJCGCS)/sum(c.MRZJCS) end as MRZJWLJTL, case when sum(c.MRZJCS)=0 then 0 else sum(d.MRBJHJCGCS)/sum(d.MRBJCS) end as MRBJWLJTL, count(case when substr(b.msc,1,2)<>86 and a.GJ is not null and b.operate_code=2 then a.IMSI else null end) as MCWZGXQQCS, count(case when substr(b.msc,1,2)<>86 and a.GJ is not null and b.operate_code=2 and b.result<>1 then a.IMSI else null end) as MCWZGXCGCS, case when count(case when substr(b.msc,1,2)<>86 and a.GJ is not null and b.operate_code=2 then a.IMSI else null end)=0 then 0 else count(case when substr(b.msc,1,2)<>86 and a.GJ is not null and b.operate_code=2 and b.result<>1 then a.IMSI else null end)/ count(case when substr(b.msc,1,2)<>86 and a.GJ is not null and b.operate_code=2 then a.IMSI else null end) as MCWZGXCGL from (select * from TAB_A union select * from TAB_B union select * from TAB_C)a left join (select * from spark_odc_dwd.D_ENS_GMAP_MM where p_hour='#{time yyyyMMddHH}') b on a.IMSI=b.IMSI left join TAB_D c on a.IMSI=c.calling_imsi left join TAB_E c on a.IMSI=c.called_imsi group by a.IMSI, a.GJ, a.YYS

2023-06-06 上传