js面试题(一)
来源:互联网 发布:上瘾网络剧第十六集 编辑:程序博客网 时间:2024/05/18 00:05
记录几个比较典型的js面试题
1 将类似 border-bottom-color的字符串转成驼峰形式的字符串
方法1 思路:将字符串以‘-’为分割点 分割成数组,利用字符串的charAt(0)定位到首字母,利用字符串的toUpperCase()转成大写,字符串的substring(1)获取到字符串除了第一位剩余的字符,最后大写的首字母与剩余字符链接即可
function test(str) { var array=str.split("-"); for(var i=1;i<array.length;i++){ array[i]=array[i].charAt(0).toUpperCase()+array[i].substring(1) } return array.join("") } alert(test('border-bottom-color'))方法2 正则 思路:正则匹配横线‘-’和其后的字母,然后借助replace方法将匹配到的子项转成
function test2(str) { var reg=/-(\w)/g return str.replace(reg,function (s0,s1) {//s0是正则匹配到的完整项-吧,-c,s1是正则里的子项 就是小括号括起来的那一项b,c return s1.toUpperCase() }) }
方法3 思路将字符串转成数组,然后遍历数组,遇到‘-’就删除,将下一个对象转成大写,最后连起来就可以了
function test(str) { var strArr=str.split(""); for(var i=0;i<strArr.length;i++){ if(strArr[i]=='-'){ strArr.splice(i,1) if(i<strArr.length){ strArr[i]=strArr[i].toUpperCase() } } } return strArr.join("")}var str="border-bottom-color-" alert(test(str))
2 查找字符串中出现最多的字符及个数
方法1 思路:利用对象的key是不可重复的这一特点,首先把字符串转成对象(map) 类似{‘s’:['s','s','s'],'d':['d','d']} 然后遍历计算出value最长的一项即可
var str="ssddffjcjdewddjkdjdjdjkdjkjkj"; function test(str) { /* * 思路:利用对象的key是不可重复的,首先把字符串转成对象形式{"s":["s","s"],"d":["d","d","d"]} * */ var obj={}; var charstr=""; var charnum=0; for(var i=0;i<str.length;i++){ if(obj[str.charAt(i)]){ obj[str.charAt(i)].push(str.charAt(i)) }else{ obj[str.charAt(i)]=[str.charAt(i)] } } /* * 然后遍历对象 查出数组最长的一项,它的key就是出现最多的字符 它的长度就是出现的次数 * */ for(y in obj){ debugger if(obj[y].length>charnum){ charnum=obj[y].length charstr=y } } return { "charstr":charstr, "charnum":charnum } } console.log(test("ssddffjcjdewddjkdjdjdjkdjkjkj"))
方法2 正则:
var str="ssddffjcjdewddjkdjdjdjkdjkjkj"; function test(str) { /*将str转成数组 利用数组的sort方法将相同的字符放到一起然后在join()成字符串*/ var str=str.split('').sort().join('') console.log(str)//cdddddddddeffjjjjjjjjjkkkkssw var reg=/(\w)\1+/g var num=0; var char="" str.replace(reg,function (s0,s1) { alert(s0) alert(s1) if(s0.length>num){ num=s0.length; char=s1; } }) console.log("出现最多的字母是"+char+" 出现的次数是"+num)//出现最多的字母是d 出现的次数是9 } test("ssddffjcjdewddjkdjdjdjkdjkjkj")3 将数字56891203256加上,分隔符转成货币形式的数字 56,891,203,256
方法1 将数字长度模3取余,根据余数将数字分割成56和891203256,将891203256转成三位一组的数组,然后和之前的56一起join
var str="56891203256"; function test(str) { var index=(str.length)%3// 0 1 2 var arr=[]; if(index!=0){ var first=str.substring(0,index) str=str.substring(index) arr.push(first) } var num=0; for(i=0;i<str.length;i++){ num++ if(num==3){ var tem=str.substring(i-2,i+1) arr.push(tem) num=0; } } console.log(arr.join(","))//56,891,203,256 } test(str)
方法2 正则
(?=) 前向声明 /a(?=b)/g 查找a前面是b的a
(?!) 反前向声明 /a(?!b)/g 查找a前面不是b的a
\b 代表一个位置 指的是字符串的开始、结束和空格的位置
(?!\b)匹配非开始结束位置var str="156891203256"; function test(str) { var reg=/(?=(?!\b)(\d{3})+$)/g return str.replace(reg,",") } alert(test(str))
3 有a,b两个值 不借助第三个变量 交换a b两个的值
思路:既然不能借助第三方 就只能在a b之间做文章 a b可能是数字 可能是字符串
如果a b 是数字 :
a=a+b
b=a-b
a=a-b 即可
如果a b是字符串 则上面都方法用不了
类似数字的加法 我们可以考虑到数组
a=[a,b]
b=a[0]
a=a[1]
方法2 利用es6的解构赋值
var a="hello";var b="world"
var [a,b]=[b,a]
console.log(a)//world
console.log(b)//hello4 有一个数字n 不允许使用for循环 写一个方法生成数组[0,1,2...n] 如果n是5 则生成数组[1,2,3,4,5]方法1 思路:不允许使用for循环,生成一个数组?除了循环 我们还可以用递归,解决这个问题的办法就是从递归入手var num=5function test(num) { var arr=[]; var result=(function(){ debugger if(num>=0){ arr.unshift(num) num-- arguments.callee()//当递归调用自身方法 方法没有名字时 可以这么写 } return arr })() alert(result) return result;}alert(test(num))
或者function test(num) { var arr=[]; function digui(){ debugger if(num>=0){ arr.unshift(num) num-- digui() } return arr } digui() return arr;}方法2
思路:利用string的replace(reg,function(){}),正则匹配几次,就会回调几次回调函数
对于n,我们要生成的数组长度就是n+1,我们创建一个n+1长度的数组arr=[],arr.length=n+1 假设n=5 arr= [ , , , , ,]
利用数组的join方法将数组转成字符相同的
function test(n){ var arr=[] var result=[] arr.length=n+1; var str=arr.join("a"); console.log(str)//aaaaa(5个a) var reg=/a/g str.replace(reg,function () { result.unshift(n) n-- }) result.unshift(0) return result} alert(test(n))
如果看这篇文章的小伙伴有其他的解决办法思路 欢迎指导(会持续更细)
阅读全文
1 0
- js面试题(一)
- 面试题总结 JS篇 (一)
- 尝试解析js面试题(一)
- 【JavaScript】4.面试题一JS基础知识(上)
- 【WEB】JS面试题涉及基础知识总结(一)
- js面试题
- js面试题
- JS面试题
- js面试题
- 收集js面试题
- JS 面试题大全
- js经典面试题
- js面试题
- 一道JS面试题
- Js面试题
- 一道JS 面试题
- js 面试题
- 一道JS面试题
- 浅谈 uninitialized_copy() 的参数类型
- POJ 1639
- PHP cookie管理
- JVM优化
- java 判断线程都执行完了(非线程池方式)
- js面试题(一)
- Eclipse使用Maven搭建Java Web项目并直接部署Tomcat8(全实战)
- [Android]Android内存泄漏你所要知道的一切(翻译)
- Ubuntu16.04 安装eclipse 并配置OpenCV (C/C++项目)
- flask中的上下文处理器app_context_processor
- circle
- chrome离线小恐龙游戏
- Debussy在win7系统下安装、编译xilinx库、以及基本使用方法
- 常用设计模式总结