笔试遇到的一些函数题(不断更新)
前言
笔试经常遇到一些函数题实现一些功能,把觉得有意思的记录下,顺带复习下,如果有更好的办法,欢迎指出
一、字符串转换为驼峰命名法
已知有字符串foo='get-element-by-id',写一个function将其转化成驼峰表示法"getElementById”
很明显可以看出就是从第二个单词开始每个单词首字母大写,首先自然是获取每个单词
function toStr(foo){ //根据分隔符获取到每个单词 var foos=foo.split("-") for(var i=1;i<foos.length;i++){ //foos[i]就是每个单词,foos[i][0]就是他的首字母需要大写,再把原单词去掉首字母进行拼接,最终取代原来的单词 foos[i]=foos[i][0].toUpperCase()+foos[i].slice(1) } }
二、数组去重
1.普通遍历数组
function getArr(arr){ for(var i=0;i<arr.length;i++){ var s=arr[i]//记录当前数据 for(var j=i+1;j<arr.length;j++){ if(s==arr[j]){//与原数组进行比较,如果相同,则存在重复,需要去掉这个数组里的数据,继续比较下去 arr.splice(j,1) j=j-1//需要更改下标 } } } }
2.利用ES6的Set容器
function getArr(arr){ var arr2=arr//定义一个数组复制原来的 var set=new Set(arr2)//利用set容器的不可重复特性实现去重 arr.splice(0,arr.length)//原来的数组置为空,准备接受去重后的数据 arr=Array.from(new Set(set)) return arr; }
三、编写一个函数,计算任意两个数字之间所能组成的奇数个数,数字必须是个位数
function getNum(n,m){ var arr=[] for(var i=n;i<=m;i++){ if(i%2==1){ arr.push(i) } } var count=0 for(var j=0;j<arr.length;j++){ for(var i=n;i<=m;i++){ count++ console.log(i*10+arr[j]) } } console.log(n+"和"+m+"两个数字之间可以组成的奇数个数为"+count) }
四、js递归的方式写1到100求和
function add(num1=1,num2=2){ var num = num1+num2; if(num2+1>100){ return num; }else{ return add(num,num2+1) } } var sum =add();
五、字符串按‘红黄蓝’排序,例如‘黄红蓝红’排序后变为‘红红黄蓝’
function sortStr(str){ var r=0,b=0,y=0 var s="" for(var i=0;i<str.length;i++){ switch(str[i]){ case '红': r++; break; case '蓝': b++; break; case '黄': y++; break; } } for(var i=0;i<r;i++) s+='红' for(var i=0;i<y;i++) s+='黄' for(var i=0;i<b;i++) s+='蓝' return s; }
六、函数实现多个数组取交集
function get(arrs){ var b=[]//存放交集结果的数组 for(var i=0;i<arrs.length;i++){ if(i==0){ b=[...new Set(arrs[i])].filter(item=>new Set(arrs[i+1]).has(item)) i++ }else{ b=[...new Set(b)].filter(item=>new Set(arrs[i]).has(item)) } } return b; }

浙公网安备 33010602011771号