该算法题来自于 codewars【语言: javascript】,翻译如有误差,敬请谅解~

- 场景
通常当你买东西时,会询问你的信用卡号码,电话号码来验证你的身份。但是,由于有人可能会看着你的信息,你不希望这些在屏幕上显示。所以,我们需要用掩码来替换。
- 任务
- 写一个函数maskify,将除最后四个字符之外的字符全部替换为'#'。
- 例如:
maskify("4556364607935616") == "############5616"
maskify( "64607935616") == "#######5616"
maskify( "1") == "1"
maskify( "") == ""
// "What was the name of your first pet?"
maskify("Skippy") == "##ippy"
maskify("Nananananananananananananananana Batman!") == "####################################man!"
- 解答
- 其一
const maskify = str => (str.length > 4 ? '#'.repeat(str.length - 4) : '' ) + [...str].splice(-4,4).join('');
- 其二
const maskify = str => (str.length > 4 ? new Array(str.length - 4).fill('#').join('') : '' ) + [...str].splice(-4,4).join('');
- 其三
const maskify = str => str.slice(0, -4).replace(/./g, '#') + str.slice(-4);
- 其四
const maskify = str => '#'.repeat( str.length - 4) + str.substr(-4);
- 其五
// 正则匹配
const maskify = str => str.replace(/.(?=....)/g, '#');
const maskify = str => str.replace(/.(?=.{4})/g, "#");
const maskify = str => str.replace(/(?=.{5})./g, '#');
- 其六
function maskify(cc) {
var x = cc.length - 4;
return x > 0 ? new Array(x + 1).join('#') + cc.slice(x) : cc;
}
- 其七
function maskify(cc) {
return cc.split('').reduce(function(p, c, i) {
return i < cc.length - 4 ? p + '#' : p + c;
}, '');
}
网友评论