Q 判断一个单词是否是回文? 很多人拿到这样的题目非常容易想到用for 将字符串颠倒字母顺序然后匹配就行了。其实重要的考察的就是对于reverse的实现。其实我们可以利用现成的函数,将字符串转换成数组,这个思路很重要,我们可以拥有更多的自由度去进行字符串的一些操作。function checkPalindrom(str) { return str == str.split('').reverse().join('');}
Q 去掉一组整型数组重复的值 道问题出现在诸多的前端面试题中,主要考察个人对Object的使用,利用key来进行筛选。/*** unique an array**/function unique(arr) { var hashTable = {}; var data = []; for(var i=0,l=arr.length;i<l;i++) { if(!hashTable[arr[i]]) { hashTable[arr[i]] = true; data.push(arr[i]); } } return data;}
Q 统计一个字符串出现最多的字母 前面出现过去重的算法,这里需要是统计重复次数function findMaxDuplicateChar(str) { if(str.length == 1) { return str; } let charObj = {}; for(let i=0;i<str.length;i++) { if(!charObj[str.charAt(i)]) { charObj[str.charAt(i)] = 1; }else{ charObj[str.charAt(i)] += 1; } } let maxChar = '', maxValue = 1; for(var k in charObj) { if(charObj[k] >= maxValue) { maxChar = k; maxValue = charObj[k]; } } return maxChar; }
Q 排序算法 如果抽到算法题目的话,应该大多都是比较开放的题目,不限定算法的实现,但是一定要求掌握其中的几种,所以冒泡排序,这种较为基础并且便于理解记忆的算法一定需要熟记于心。冒泡排序算法就是依次比较大小,小的的大的进行位置上的交换。function bubbleSort(arr) { for(let i = 0,l=arr.length;i<l-1;i++) { for(let j = i+1;j<l;j++) { if(arr[i]>arr[j]) { let tem = arr[i]; arr[i] = arr[j]; arr[j] = tem; } } } return arr;}
![](http://img.xiumi.us/xmi/ua/3fW7/i/4605e78173775880c0305385325495d0-sz_4864.png@1l_640w.png)
除了冒泡排序外,其实还有很多诸如 插入排序,快速排序,希尔排序等。每一种排序算法都有各自的特点。全部掌握也不需要,但是心底一定要熟悉几种算法。 比如快速排序,其效率很高,而其基本原理如图(来自wiki):
![](http://img.xiumi.us/xmi/ua/3fW7/i/d4e5d0a778dba725091d8317e6bac939-sz_93016.gif)
算法参考某个元素值,将小于它的值,放到左数组中,大于它的值的元素就放到右数组中,然后递归进行上一次左右数组的操作,返回合并的数组就是已经排好顺序的数组了。function quickSort(arr) { if(arr.length<=1) { return arr; } let leftArr = []; let rightArr = []; let q = arr[0]; for(let i = 1,l=arr.length; i<l; i++) { if(arr[i]>q) { rightArr.push(arr[i]); }else{ leftArr.push(arr[i]); } } return[].concat(quickSort(leftArr),[q],quickSort(rightArr));}
Q 不借助临时变量,进行两个整数的交 这种问题非常巧妙,需要大家跳出惯有的思维,利用 a , b进行置换。主要是利用 + – 去进行运算,类似 a = a + ( b – a) 实际上等同于最后 的 a = b;
function swap(a , b) { b = b - a; a = a + b; b = a - b; return [a,b];}
Q 递归
递归是一种思想:类似于我们的计数器,开闭原则,
递归的实质就是函数自己调用自己,
递归注意点:递归必须有跳出条件,否则是死循环。 用递归求1+100和。 function SumNum(num){ if(num<100){ return 0; } return num+ SumNum(num-1); }
Q 回掉 什么情况下,使用回调函数,
回调函数一般是用于定义一个规则来使用的,
规则的传递只能通过函数实现,通过变量无法达成,所以我们需要传递规则的时候必须使用回调函数。function selectAll(par1,par2,callback){ return callback(par1,par2); } function callback(par1,par2){ return par1+par2; }
Q 合并排序,将两个已经排序的数组合并成一个数组,其中一个数组能容下两个数组的所有元素。
张辛欣:难道,我的书写,在你眼中,是自恋倒影?喜欢自拍?下一个句子女读者请慎入:我对网上无所不在的驴脸蛋自拍照,看着就反胃,千篇一律,眼圈都描得跟驴眼睛似得,模样彼此相似,亚洲男生也加入这种自拍行列,太娘了吧?不过Prisma 滤镜app发布当天,我下载APP拍一张自拍,做各种自我变形放相似微博,英国的法国的加拿大的读者看到了立刻下载,拍狗,拍猫,拍风景,玩各种变形贴出来,响应我自拍我变我发表的问题:传统画家出局了?