首页 > 代码库 > 编程题总结
编程题总结
/*编写一个方法,对传入的参数进行排序*/
//考察arguments对象,对象属性的遍历
function sortArguments(){ var arr=[]; for(var key in arguments){ arr.push(arguments[key]); } return arr.sort(); }
/**
*@desc: fibonacci
*@param: count {Number}
*@return: result {Number} 第count个fibonacci值,计数从0开始
fibonacci数列为:[1, 1, 2, 3, 5, 8, 13, 21, 34 …]
则getNthFibonacci(0)返回值为1
则getNthFibonacci(4)返回值为5 */
//规律:第三个数是前两个数之和
function getNthFibonacci(count) { if (count<0) return 0; if (count<=1) return 1; var first=1,second=1,third; for (var i = 2; i <=count; i++) { third=first+second; first=second; second=third; }; return third; }
/*.有这样一个URL,http://mail.163.com/?a=1&b=2&c=3&d=xxx&e。
输出函数QuerySearch(),其有一个参数name,输出其对应的value。
*/
考察的是字符串操作
思路:str.split(‘?’)[1]返回的是问号后面的字符串
再使用一次split(‘&’)返回的是数组
通过遍历数组元素字符串,使用indexOf()判断输入的name+‘=‘是否为-1,如果是就表明不存在,遍历下一个,如果不为-1,表明存在,返回该数组元素中的=后面的值,使用slice(start),start是(name+‘=‘).length
function querySearch(url,name){ var arr=url.split(‘?‘)[1].split(‘&‘); var msg=name+‘=‘; for (var i = 0; i < arr.length;) { var index=arr[i].indexOf(msg); if (index<0) { i++; }else{ start=msg.length; return arr[i].slice(start) }; }; return "NOT FOUND"; }
/*编写一个方法,去掉一个数组的重复元素。*/
思路:把数组的值一次放入新的数组,放入之前判断已经放入的元素有没有一样的值
newarr.indexOf(arr[i])==-1表示没有
function removeDuplicate(arr) { var result=[]; for (var i = 0; i < arr.length; i++) { if (result.indexOf(arr[i])==-1) { result.push(arr[i]); }; }; return result; }
/*编写一个JavaScript函数,传入仅包含数字的多维数组,返回拍平后的结果。
(比如,传入[1,[2,3]],返回[1,2,3])*/
思路,arr的join()转化为字符串,再用str的split转化为数组,注意:这时候数组的值是字符串,应该用Number()转化类型,还用到了arr的map方法
function flatten(arr) { //return flatted_arr; var newarr = arr.join().split(","); //字符串类型转化为数字类型 return newarr.map(function(e) { return Number(e) }) }
/*请写一个 getParents 方法让它可以获取某一个 DOM 元素的所有父亲节点。*/
思路:通过id获取该元素,e.parentNode.parentNode....考虑用while语句,语句中先把获取到父元素的tagName存入数组,然后获取到该父元素的父元素,判断是否存在(parent.tagName)
function getParents(id) { var e = document.getElementById(id); var parent = e.parentNode; var arr = []; //while先判断再执行 while (parent.tagName) { arr.push(parent.tagName); parent = parent.parentNode; } console.log(arr) };
/*已知有字符foo="get-element-by-id",写一个function将其转换成驼峰表示法"getElementById" */
思路:arr的split分割成数组,循环遍历数组,使用charAt(0)获取第一个字符变成大写,再使用concat(1)连接剩下的数组,最后再用数组的Join(‘‘)连起来
tips:一定要用join(‘’),不然会用逗号连起来
function toUpperNote(str) { var result; var arr; arr = str.split(‘-‘); for (var i = 1; i < arr.length; i++) { arr[i] = arr[i].charAt(0).toUpperCase().concat(arr[i].slice(1)) }; return arr.join(‘‘); }
/*对象的深度克隆*/
思路:首先判断对象的类型
function isClass(o) { if (o === null) return "Null"; if (o === undefined) return "Undefined"; return Object.prototype.toString.call(o).slice(8, -1); } function deepClone(obj) { var result, oClass = isClass(obj); //确定result的类型 if (oClass === "Object") { result = {}; } else if (oClass === "Array") { result = []; } else { return obj; } for (key in obj) { var copy = obj[key]; if (isClass(copy) == "Object") { result[key] = arguments.callee(copy); //递归调用 } else if (isClass(copy) == "Array") { result[key] = arguments.callee(copy); } else { result[key] = obj[key]; } } return result; }
编程题总结