JS手写 String substr 方法

/*
  substr:抽取字符
  substr() 方法可在字符串中抽取从 开始 下标开始的指定数目的字符
  提示: substr() 的参数指定的是子串的开始位置和长度,因此它可以替代 substring() 和 slice() 来使用。
  注意: substr() 方法不会改变源字符串。
  
  语法:
    string.substr(start, length)
  
  参数值:
    start:必选。
          要抽取的子串的起始下标。必须是数值。默认是 0。
          如果是负数,start = string.length + start。
          
    length:可选。
           抽取的的字符长度。必须是数值。等于 0/负数 则直接返回空字符串。
           如果省略了该参数,那么返回从 string 的开始位置到结尾的字串。
           
  返回值:抽取字符串
*/
String.prototype.mySubstr = function(start = 0, length) {
  if (length < 0 || length === 0) return ''

  start = start < 0 ? this.length + start : start
  let remainingLength = this.length - start // 开始截取位置后的剩余字符长度
  length = length ?
    (length > remainingLength ? remainingLength : length) :
    remainingLength

  // if (length) {
  //   length = length > remainingLength ? remainingLength : length
  // } else {
  //   length = remainingLength
  // }

  let str = ''
  for (let i = start; i < start + length; i++) {
    str += this[i]
  }
  return str
}

// 测试代码
console.log('---------------- 1 ---------------------')
console.log('1===', 'jiaru-beauty'.substr()) // jiaru-beauty
console.log('1===', 'jiaru-beauty'.mySubstr()) // jiaru-beauty

console.log('---------------- 2 ---------------------')
console.log('2===', 'jiaru-beauty'.substr(6)) // beauty
console.log('2===', 'jiaru-beauty'.mySubstr(6)) // beauty

console.log('---------------- 3 ---------------------')
console.log('3===', 'jiaru-beauty'.substr(-6)) // beauty
console.log('3===', 'jiaru-beauty'.mySubstr(-6)) // beauty

console.log('---------------- 4 ---------------------')
console.log('4===', 'jiaru-beauty'.substr(6, 0)) // ''
console.log('4===', 'jiaru-beauty'.mySubstr(6, 0)) // ''

console.log('---------------- 5 ---------------------')
console.log('5===', 'jiaru-beauty'.substr(6, 3)) // bea
console.log('5===', 'jiaru-beauty'.mySubstr(6, 3)) // bea

console.log('---------------- 6 ---------------------')
console.log('6===', 'jiaru-beauty'.substr(6, -3)) // ''
console.log('6===', 'jiaru-beauty'.mySubstr(6, -3)) // ''

console.log('---------------- 7 ---------------------')
console.log('7===', 'jiaru-beauty'.substr(-6, 3)) // bea
console.log('7===', 'jiaru-beauty'.mySubstr(-6, 3)) // bea

console.log('---------------- 8 ---------------------')
console.log('8===', 'jiaru-beauty'.substr(-6, -3)) // ''
console.log('8===', 'jiaru-beauty'.mySubstr(-6, -3)) // ''

console.log('---------------- 9 ---------------------')
console.log('9===', 'jiaru-beauty'.substr(-6, 0)) // ''
console.log('9===', 'jiaru-beauty'.mySubstr(-6, 0)) // ''

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值