最近遇到的试题 1.求字符串的字节长度(英文一个字节,汉字两个字节)
1 2 3 4 5 6 7 8 9 10 11 /*charCodeAt() 方法可返回指定位置的字符的 Unicode 编码。这个返回值是 0 - 65535 之间的整数。*/ function getByte(str) { var len = str.length, bytes = 0; for (var i = 0; i < str.length; i++) { if (str[i].charCodeAt() > 255) { bytes++; } } return len + bytes; }
2.specify(“hello world”)// => ‘h e l l o w o r l d’ 实现specify函数
1 2 3 String.prototype.specify = function () { return this.replace(/\s*/g, "" ).split ("" ).join (" " ); }
3.数组去重
1 2 3 4 5 6 7 8 9 10 11 12 function unique(arr) { var _obj = {}, _arr = [], len = arr.length; for (var i = 0; i < len; i++) { if (!_obj[arr[i]]) { _obj[arr[i]] = 1; _arr.push(arr[i]); } } return _arr; }
4.实现一个函数clone,可以对JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 Object.prototype.clone = function () { var o = typeof(this) === "object" ? {} : []; for (e in this) { o[e] = typeof(this[e]) === "object" ? this[e].clone () : this[e]; } return o; } deepClone: function (obj) { var buf, _this = this; if (obj instanceof Array) { buf = []; //创建一个空数组 var len = obj.length; while (len--) { buf[len] = _this.deepClone(obj[len]); } return buf; } else if (obj instanceof Object) { buf = {}; //创建一个空对象 for (var k in obj) { buf[k] = _this.deepClone(obj[k]); } return buf; } else { return obj; } }
5.下面这个结构,点击每一列的时候alert其index?(最好使用闭包)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 <ul id ="test" > <li>这是第一条</li> <li这是第二条</li> <li这是第三条</li> </ul> var domList = document.getElementById("test" ).getElementsByTagName("li" ), len = domList.length; for (var i = 0; i < domList.length; i++) { domList[i].index = i; domList[i].onclick = function () { console.log(this.index); } } var domList = document.getElementById("test" ).getElementsByTagName("li" ), len = domList.length; for (var i = 0; i < domList.length; i++) { domList[i].onclick = (function (n) { return function () { console.log(n); } })(i); }
6.将伪数组转化为标准数组
1 2 3 function arrayLike () { return Array.prototype.slice.call(arguments); }
7.有这样一个URL:http://item.taobao.com/item.htm?a=1&b=2&c=&d=xxx&e,请写一段JS程序提取URL中的各个GET参数(参数名和参数个数不确定),将其按key-value形式返回到一个json结构中
1 2 3 4 5 6 7 8 9 10 11 12 function serilizeUrl(url) { var result = {}; url = url.split("?" )[1]; if (!url) return null; var map = url.split("&" ), len = map.length; for (var i = 0; i < len; i++) { var _arr = map[i].split ("=" ); result[_arr[0]] = _arr[1]; } return result; }
8.兔子数列是什么(前面相邻两项之和,构成了后一项)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 var result = []; function rabbit(n) { //月数 返回成对兔子数 if (n == 1) { return 1; } else if (n == 2) { return 1; } else { if (result[n]) { return result[n]; } else { result[n] = arguments.callee(n - 1) + arguments.callee(n - 2); return result[n]; } } }
9.从一个给定的数组arr中,随机返回num个不重复项
1 2 3 4 5 6 7 8 9 10 11 function getArrayItems(arr, num) { var _arr = []; for (var i = 0; i < num; i++) { if (arr.length > 0) { var index = Math.floor(Math.random() * arr.length); _arr[i] = arr[index]; arr.splice(index, 1); } } return _arr; }
结语 !!!:得让你用笔去答题
上面的试题,虽然难度不高, 但是它考验了一个程序员基本的逻辑思维,当你思路都不清晰了,你能保证你的程序能正常运行吗? 上面并没有要求你用多精妙的方法去实现,只是要求实现而已。