妙味茶馆

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 28753|回复: 38

[问题答疑类] 妙味课堂-JavaScript面试题系列1

  [复制链接]
leo 发表于 2013-3-25 00:11:31 | 显示全部楼层 |阅读模式
在很多面试的过程中,作为前端开发的你总会遇到各种诡异的面试题,

抛开那些让人郁闷的、想把答题者的脑袋变成ECMAScript解析器的作用域、闭包、上下文执行结果的恶心题目不说……有一些JS面试题还是出的挺不错的~

这些优秀的面试题都有一些共同点:既考核了知识点,还考核了答题者的解题思路。

对于这样的面试题,我们是有兴趣了解并乐于思考的。今天就给大家选取了三道比较精彩的面试题,都是妙味课堂的学员去面试过程中遇到的。

通过对这些JS面试题的视频讲解,相信能带给大家更多思路上的梳理与技法的总结。

先看看面试题是什么样的:

第一道题:请写一个字符串转成驼峰的方法?       
例如:border-bottom-color  -> borderBottomColor

查找字符串中出现最多的字符和个数?       
例如:sdjksfssscfssdd  -> 字符最多的是s,出现了7次

如何给字符串加千分符?       
例如:3562123761  -> 3,562,123,761


要求:以上三道题,都需要用两种以上的方式实现:一种用传统的字符串、数组方式实现,一种用正则表达式的方式实现;





有兴趣的朋友不妨可以自己动手尝试一下,先实现,再看视频教程的讲解——当然解题思路有许多种,视频中的方法只是抛砖引玉,大家尽可能天马行空的发挥想法与创造,让解题过程充满乐趣~~




稍后会上传高清视频,以供大家下载,请关注论坛更新~~







回复

使用道具 举报

powerfly 发表于 2013-3-25 14:19:40 | 显示全部楼层
第一题
  1. <!DOCTYPE html>
  2. <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
  3.         <head>
  4.                 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5.                 <title></title>
  6.                 <meta name="" content="" />
  7. <script type="text/javascript">
  8.         function hump(str){
  9.                 if(typeof str!='string') return;

  10.                 var str = str.split('-');
  11.                 var newStr = '';

  12.                 for(var i=0,len=str.length;i<len;i++) {
  13.                         newStr+= str[i].charAt(0).toLocaleUpperCase()+str[i].substring(1);
  14.                 }

  15.                 return newStr;
  16.         }
  17.         alert(hump('border-bottom-color'))
  18. </script>
  19.         </head>
  20.         <body>
  21.                
  22.         </body>
  23. </html>
复制代码
第二题:
  1. <!DOCTYPE html>
  2. <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
  3.         <head>
  4.                 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5.                 <title></title>
  6.                 <meta name="" content="" />
  7. <script type="text/javascript">
  8.                 //类似于一种数组去重的方法
  9.         function a(str){
  10.                 if(typeof str!='string') return;
  11.                                
  12.                                 var str=str.split('');
  13.                                 var max = 0;
  14.                                 var hash={};//hash表,用于储存数目
  15.                                 var newStr='';

  16.                                 for(var i=0,len=str.length;i<len;i++) {
  17.                                         hash[str[i]]?hash[str[i]]++:hash[str[i]]=1//如果 hash表上已经有了这个值,那么就累加,否则赋值1(表示已经出现了一次)
  18.                                 }
  19.                                
  20.                                 //遍历hash表里的索引值
  21.                                 for(var k in hash){
  22.                                         max = Math.max(max,hash[k]);//取出最大的那个值
  23.                                         if(hash[k]==max) {
  24.                                                 newStr=k;
  25.                                         }
  26.                                 }
  27.                                
  28.                                 alert('最多的字符是'+newStr+',出现了最多'+max+'次')
  29.                                        

  30.         }
  31.                 a("sdjksfssscfssdd")
  32.        
  33. </script>
  34.         </head>
  35.         <body>
  36.                
  37.         </body>
  38. </html>
复制代码
回复 支持 1 反对 0

使用道具 举报

昂缔 发表于 2013-3-25 13:35:34 | 显示全部楼层
转驼峰

var s = 'border-bottom-color'.split('-');
var tmp=[];
for(i in s){
        var first = s[i].charAt(0).toUpperCase();

        tmp.push(''+first+s[i].substring(1))

}
var str = tmp.join('-');
console.log(str)
回复 支持 反对

使用道具 举报

powerfly 发表于 2013-3-25 13:38:29 | 显示全部楼层
第一题:
[html]<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
        <head>
                <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                <title></title>
                <meta name="" content="" />
<script type="text/javascript">
        function hump(str){
                if(typeof str!='string') return;

                var str = str.split('-');
                var newStr = '';

                for(var i=0,len=str.length;i<len;i++) {
                        newStr+= str.charAt(0).toLocaleUpperCase()+str.substring(1);
                }

                return newStr;
        }
        alert(hump('border-bottom-color'))
</script>
        </head>
        <body>
               
        </body>
</html>
[/html]
回复 支持 反对

使用道具 举报

昂缔 发表于 2013-3-25 13:56:42 | 显示全部楼层
powerfly 发表于 2013-3-25 13:38
第一题:
[html]

乱码了乱码了乱码了乱码了乱码了
回复 支持 反对

使用道具 举报

700te 发表于 2013-3-25 14:00:18 | 显示全部楼层
第二题自认为最少代码解法...
  1. var i,len,maxobj=0,maxnum=0,obj={};
  2. var arr="sdjksfssscfssdd";
  3. for(i=0,len=arr.length;i<len;i++){
  4.         obj[arr[i]]?obj[arr[i]]++:obj[arr[i]]=1;
  5.         if(maxnum<obj[arr[i]]){
  6.                 maxnum=obj[arr[i]];maxobj=arr[i];
  7.         }
  8. }
  9. alert(maxobj+"\n在数组中出现了\n"+maxnum+"次")
复制代码

补充内容 (2013-3-25 14:02):
这个是刚刚研究出来处理数组的,刚刚好妙味群里也出来一道差不多的题。。不过是字符串哈。
var arr=[29,5,2,39,4,4,100,2,21,75,2,52];数组也能用的~

补充内容 (2013-3-25 14:25):
//第一题驼峰式正则解法
var str="border-bottom-color";
var re=/\b\w+\b/g;
str=str.replace(re,function(t){
        return t.substring(0,1).toUpperCase()+t.substring(1);
}).replace(/-/g,"");

str=str.
回复 支持 反对

使用道具 举报

powerfly 发表于 2013-3-25 14:08:30 | 显示全部楼层
第二题:
和楼上的同学思路一样
[html]<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
        <head>
                <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                <title></title>
                <meta name="" content="" />
<script type="text/javascript">
                //类似于一种数组去重的方法
        function a(str){
                if(typeof str!='string') return;
                               
                                var str=str.split('');
                                var max = 0;
                                var hash={};//hash表,用于储存数目
                                var newStr='';

                                for(var i=0,len=str.length;i<len;i++) {
                                        hash[str]?hash[str]++:hash[str]=1//如果 hash表上已经有了这个值,那么就累加,否则赋值1(表示已经出现了一次)
                                }
                               
                                //遍历hash表里的索引值
                                for(var k in hash){
                                        max = Math.max(max,hash[k]);//取出最大的那个值
                                        if(hash[k]==max) {
                                                newStr=k;
                                        }
                                }
                               
                                alert('最多的字符是'+newStr+',出现了最多'+max+'次')
                                       

        }
                a("sdjksfssscfssdd")
       
</script>
        </head>
        <body>
               
        </body>
</html>[/html]
回复 支持 反对

使用道具 举报

700te 发表于 2013-3-25 14:13:11 | 显示全部楼层
powerfly 发表于 2013-3-25 14:08
第二题:
和楼上的同学思路一样
[html]

怎么都是乱码啊
回复 支持 反对

使用道具 举报

powerfly 发表于 2013-3-25 14:15:48 | 显示全部楼层
700te 发表于 2013-3-25 14:13
怎么都是乱码啊

  不是吧
回复 支持 反对

使用道具 举报

powerfly 发表于 2013-3-25 14:16:39 | 显示全部楼层
700te 发表于 2013-3-25 14:13
怎么都是乱码啊

不能运行吗
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|妙味课堂 ( 京ICP备08102442号

GMT+8, 2019-3-22 06:27 , Processed in 0.158705 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表