LinDaiDai/niubility-coding-js

⛽️第5期第1题:实现mask函数将"123456"转为"##3456",只保留最后四个字符

Opened this issue · 0 comments

实现mask函数将"123456"转为"##3456",只保留最后四个字符

(题目来源:https://github.com/30-seconds/30-seconds-of-interviews)

首先介绍一下题目的意思吧😄,案例🌰如下:

const mask = (str, maskChar = '#') => {
  // 代码
}
console.log(mask('123456')); // '##3456'
console.log(mask('lindaidai')); // '#####idai'

这道题的难度应该没有那么大,处理方式也有很多。呆呆这边主要是讲解一下如何使用padStart来实现的。

简单介绍一下padStart方法吧,它是ES8新增的实例函数,与它作用差不多的还有一个叫padEnd的函数:

  • String.prototype.padStart
  • String.prototype.padEnd

作用:允许将空字符串或其他字符串添加到原始字符串的开头或结尾。

语法

padStart(targetLength, [padString])
  • targetLength: 必填,当前字符串需要填充到的目标长度。如果这个数值小于当前字符串的长度,则返回当前字符串本身。
  • padString: 可选,填充字符串。如果字符串太长,使填充后的字符串长度超过了目标长度,则只保留最左侧的部分,其他部分会被截断,此参数的缺省值为" "

例如:

'x'.padStart(4, 'ab') // 'abax'
'x'.padEnd(5, 'ab') // 'xabab'

哈哈,另外想要了解如何实现一个padStart的小伙伴可以看呆呆之前一篇文章哟:DD每周前端七题详解-第二期

言归正传,让我们回到这道题目哈,首先让我们来处理一下输入参数边界的情况,例如输入的str不存在或者长度小于4的时候:

const mask = (str, maskChar = '#') => {
  if (!str || str.length <= 4) return str;
}

其次,我们可以只保留住str的末尾四个字符,然后使用padStart将这四个字符填充至str.length即可,如下:

const mask = (str, maskChar = '#') => {
  if (!str || str.length <= 4) return str;
  return str.slice(-4).padStart(str.length, maskChar);
}
  • slice不会影响原本的字符串
  • 使用padStart填充即可