Js代码题
1. 千分位
题目:要求返回参数数字的千分位分隔符字符串。
思路:
在字符串长度不确定的情况下,可以使用递归。
_comma(number % 1000) 是获取数字最后三位,将其放在返回值的最后面,并且在前面加一个逗号
_comma(Math.floor(number / 1000)) 是将剩下的部分传入函数本身
不断重复,直到入参的number小于1000,返回 number.toString(),函数最后返回一个完整的千位分隔符的字符串。
function _comma(number) {
// 补全代码
if(number<1000){
return number.toString();
}else{
return _comma(Math.floor(number/1000))+","+_comma(number%1000)
}
}
PS: 有个bug:如果number为123456789012,会输出123,456,789,12
完善版:
function _comma(number){
// 补全代码
let zf=false;
if(number<0){
zf = true;
}
number = Math.abs(number)
number = number.toString().split('');
let n = number.length;
for(let i=n-3;i>0;i-=3){
number.splice(i,0,',');
}
if(zf) number.unshift('-');
return number.join('');
}
console.log(f(123456789012));
知识扩展:
Math.floor()、Math.round()、Math.ceil()
下取整: Math.floor()
四舍五入:Math.round()
上取整: Math.ceil()
reverse join split splice 用法
参考这位博主总结
2. 创建数组
返回一个长度为参数值并且每一项值都为参数值的数组
通过new Array()
函数构造实例的时候带入参数,可以生成该参数长度的空数组
通过Array.fill()
函数可以将数组的每一项都改编为参数值
<script type="text/javascript">
const _createArray = (number) => {
// 补全代码
return Array(number).fill(number);
}
</script>
3. JS获取扩展名
function getFileExtension(filename) {
return filename.split(".").pop()
}
- String的lastIndexOf方法 详细解释
function getFileExtension(filename) {
return filename.slice((filename.lastIndexOf(".") - 1 >>> 0) + 2)
}
function getFileExtension1(filename) {
return /[.]/.exec(filename) ? /[^.]+$/.exec(filename)[0] : undefined
}
这里的/[.]/.exec(filename)
是用来判断.是否存在,如果不存在的话,其值为null;
/[^.]+$/.exec(filename)[0]
拿到从.
开始匹配的字符串,也就是扩展名。如果不存在则返回undefined。
4. 最长公共前缀
给你一个大小为 n 的字符串数组 strs ,其中包含n个字符串 , 编写一个函数来查找字符串数组中的最长公共前缀,返回这个公共前缀。
数据范围: 0≤n≤50000 \le n \le 5000 0≤n≤5000, 0≤len(strsi)≤50000 \le len(strs_i) \le 5000 0≤len(strsi)≤5000
进阶:空间复杂度 O(n)O(n)O(n),时间复杂度 O(n)O(n)O(n)
/**
*
* @param strs string字符串一维数组
* @return string字符串
*/
function longestCommonPrefix( strs ) {
// write code here
if(strs.length==0) return "";
let s = "";//标准
for(let i=0;i<strs[0].length;i++){
let j=0;
while(j<strs.length-1){
if(strs[j][i]===strs[j+1][i]){
j++;
}else{
return s;
}
}
s += strs[0][i];
}
return strs[0];
}
5.ip地址
编写一个函数来验证输入的字符串是否是有效的 IPv4 或 IPv6 地址
IPv4 地址由十进制数和点来表示,每个地址包含4个十进制数,其范围为 0 - 255, 用(“.”)分割。比如,172.16.254.1;
同时,IPv4 地址内的数不会以 0 开头。比如,地址 172.16.254.01 是不合法的。
IPv6 地址由8组16进制的数字来表示,每组表示 16 比特。这些组数字通过 (“:”)分割。比如, 2001:0db8:85a3:0000:0000:8a2e:0370:7334 是一个有效的地址。而且,我们可以加入一些以 0 开头的数字,字母可以使用大写,也可以是小写。所以, 2001:db8:85a3:0:0:8A2E:0370:7334 也是一个有效的 IPv6 address地址 (即,忽略 0 开头,忽略大小写)。
然而,我们不能因为某个组的值为 0,而使用一个空的组,以至于出现 (:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)