JavaScript 基础算法
querystring
解析url
function queryString(url){ trueif( url.indexOf('?') > -1 ){ truetruevar arr = url.split('?'); truetruevar queryString = arr[1]; truetruevar items = queryString.length ? queryString.split('&') : []; truetruevar queryObj = {}; truetruevar itemArr,name,value; truetruefor(var i=0,len=items.length;i<len;i++){ truetruetrueitemArr = items[i].split('='); truetruetruename = decodeURIComponent(itemArr[0]); truetruetruevalue = decodeURIComponent(itemArr[1]); truetruetrueif(name.length){ truetruetruetruequeryObj[name] = value; truetruetrue} truetrue} truetruereturn queryObj; true} } var url = 'http://baidu.com?a=100&c=1034'; console.log(JSON.stringify(getQueryString(url)));
|
2
为Array原型中添加一个去重的操作
Array.prototype.uniqiue=function(arr){ arr.sort(); var i=1, j=0; length=arr.length; arrTemp=[]; arrTemp=arrp[0]; while(i<length){ if(arrTemp[j]==arr[i]){ i++; }else{ arrTemp[++j]=arr[i++]; } } return arrTemp; } Array.prototype.uniqiue=function(arr){ var arrTemp=[]; var i=0; while(i<arr.length){ buf=arr[i]; var j=0; while(j<arrTemp.length){ if (arrTemp[j] == buf) { break; } j++; } if (j==arrTemp.length) { arrTemp.push(buf); } i++; } return arrTemp; }
|
这道题是阿里某一年前端的面试题. 其实在现实使用中一般不会做这么大的动作去改变Array对象的原型,因为动作太大,保不齐哪里会不会出什么问题. (一言以蔽之, 所有对全局的操作都需要慎重再慎重.) 这道题的主要考点我觉得有两个,一个是对js原型链的理解.另一个是对数组去重的基本算法的考察.解决这道题的方法有很多种算法, 在思考的过程中要兼顾性能最优.
Fibonacci
真是在那儿都遇到它.(这其实已经跟JS无关了). 之前的在一篇文章中提到过它的作用(当时比较的是二分查找和fib查找之间的性能比较.) 代码不贴了,可以在那篇文章中找到.两点需要注意:
- 打死都不要用递归, 是典型的2^n类型. 会吃光你所有的性能. 无论你的机器性能有多强
- 用迭代代替递归. 用三个参数进行叠加就可以了.(甚至两个). 也不要用数组, 三个临时变量或者两个临时变量就够了.(^_^)
再提一点, 为什么不建议用数组,而采用三个临时变量呢? 原因在于: 数组是存放在内存的栈中, 你看到栈会觉得已经够快了是吧?是挺快的. 但是呢, 临时变量存放在哪儿呢? 寄存器中. 现在知道这个区别了吗? 这个结论的来源是<深入理解计算机系统>, 有兴趣的同学可以去了解下.
insertAfter
function insertAfter(newEl,targetNode){ truevar parentNode=targetNode.parentNode; trueif (parentNode.lashChild==targetNode) { truetrueparentNode.appendChild(newEl); true}else{ truetrueparentNode.insertBefore(newEl,targetNode.nextSubling); true} }
|
基本DOM操作
sort
function sortNmu(a,b) { truereturn a-b; } var myarr=[]; myarr.sort(sortNmu);
|
会快排么?
(^_^)
### sum
求sum(),参数的长度无限制
// Should equal 15 sum(1, 2, 3, 4, 5); // Should equal 0 sum(5, null, -5); // Should equal 10 sum('1.0', false, 1, true, 1, 'A', 1, 'B', 1, 'C', 1, 'D', 1, 'E', 1, 'F', 1, 'G', 1); // Should equal 0.3, not 0.30000000000000004 sum(0.1, 0.2); */ function sum() { var nResult = 0; for (var i = 0, l = arguments.length; i < l; i++) { nResult += window.parseFloat(arguments[i]) || 0; } return nResult.toFixed(3) * 1000 / 1000; }
|
这好像也是阿里某年的一道笔试题. 这道题我觉得有意思的地方在于对于各种异常输入情况的处理,以及对结果的处理.另外对于js基础部分是对arguments 的了解.
### 正则匹配
/^(\w+[_|\.|\_]?)*(\w)+@(\w+[_|\.|\_])*(\w)+\.[a-zA-z]{2,4}$/.test("wanglinzhizhi@hotmail.com");
|
loading…..
晚安,地球
by wanglinzhizhi