题目描述
题目描述:实现一个function randomString(length){}
,只包括26个小写字母+10个数字。
如果你对Math稍有了解,你可能会这么写这个功能。
// Math.floor作用为向下取整
// Math.random()作用为取得一个0~1之间的伪随机数 例如:0.6367555509307221
function randomString(length){
let res = '';
let chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
for(let i=0; i<= length - 1; i++){
res += chars.charAt(Math.floor(Math.random() * 36));
}
return res;
}
但实际上,面试官可能更希望你说出其他更多的答案,因为Math很多人都可能会想到。
如果对toString这个函数有更为深入的认识的话,就会明白面试官希望的答案是什么。
面试官希望你对原型链上的object.prototype上的对象默认方法有全面深入的理解,而实际上,很多人都做不到,就比如这个toString方法,很多人都不知道它可以接受一个参数。
接下来我将会用toString方法实现上述题目的功能。
Number.prototype.toString()
除了 null
和undefined
之外,其他的类型(数值、布尔、字符串、对象)都有toString()
方法,它返回相应值的字符串表现(并不修改原变量)。每个object都有一个 toString()
方法。当该对象被表示为一个文本值时,或者一个对象以预期的字符串方式引用时自动调用。 默认情况下, toString()
方法被每个Object
对象继承。如果此方法在自定义对象中未被覆盖,toString()
返回 “[object type]
“,其中type
是对象的类型。
语法
number.toString(radix)
参数值
参数 | 描述 |
---|---|
radix | 可选。规定表示数字的基数,是 2 ~ 36 之间的整数。若省略该参数,则使用基数 10。但是要注意,如果该参数是 10 以外的其他值,则 ECMAScript 标准允许实现返回任意值。2 – 数字以二进制值显示8 – 数字以八进制值显示16 – 数字以十六进制值显示 |
返回值
类型 | 描述 |
---|---|
String | 把数字转换为字符串 |
举例

String.prototype.substring()
定义和用法
substring() 方法用于提取字符串中介于两个指定下标之间的字符。
语法
stringObject.substring(start,stop)
参数 | 描述 |
---|---|
start | 必需。一个非负的整数,规定要提取的子串的第一个字符在 stringObject 中的位置。 |
stop | 可选。一个非负的整数,比要提取的子串的最后一个字符在 stringObject 中的位置多 1。如果省略该参数,那么返回的子串会一直到字符串的结尾。 |
返回值
一个新的字符串,该字符串值包含 stringObject 的一个子字符串,其内容是从 start 处到 stop-1 处的所有字符,其长度为 stop减 start。
说明
substring() 方法返回的子串包括 start 处的字符,但不包括 stop 处的字符。
如果参数 start 与 stop 相等,那么该方法返回的就是一个空串(即长度为 0 的字符串)。如果 start 比 stop 大,那么该方法在提取子串之前会先交换这两个参数。
最终代码
Number.prototype.toString方法,toString接收一个参数radix,代表数字的基数,也就是我们所说的2进制、10进制、16进制等等。
radix的取值范围也很容易得出来,最小进制就是我们得二进制,所以redix>=2。0-9(10个数字)+a-z(26个英文字母)总共36个,所以redix<=36。总结一下2<=radix<=36,默认是10。
// 获取指定长度的随机字符串
function randomString(length){
let str='';
while(length>0){
const fragment= Math.random().toString(36).substring(2);
if(length>fragment.length){
str+=fragment;
length-=fragment.length;
}else{
str+=fragment.substring(0,length);
length=0;
}
}
return str;
}
很明显,第二个方法的时间复杂度比第一个低。
原文始发于微信公众号(豆子前端):下次面试官问你怎么拿随机字符串,你就这么答
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/56791.html