js一些题目
1、对象里面的key不区分出string
var a={}; a[1]="a"; a["1"]=2; console.log(a);
2、扩展Array原型,编写一个去除数组重复项的方法
// 算法一,两层循环,性能差 Array.prototype.unique = function(){ var len = this.length, i; // 两两比较(数组长度大于1) while ( --len > 0 ) { i = len; while ( --i >= 0 ) { // 前一项索引最小为0 if ( this[len] === this[i] ) { // 最后一项与前一项进行比较 //this.splice(i, 1); // this.length自动减一,删除前面的重复项 this.splice(len, 1); // this.length自动减一,删除后面的重复项 i--; } } } return this; }; // 算法二,性能优化 Array.prototype.unique = function(){ var i, key, len = this.length, cache = {}, // 缓存对象 ret = []; // 要返回的数组 for ( i = 0; i < len; i++ ) { key = typeof this[i] + this[i]; if ( cache[key] !== 1 ) { cache[key] = 1; ret.push( this[i] ); } } return ret;; }; // 解决方法三,直接使用jQuery.unique工具函数 var arr = [1,3,4,6,9,10,4,6]; arr = jQuery.unique( arr ); // [1, 3, 4, 6, 9, 10]
3、编写一个JavaScript函数 parseQueryString,它的用途是把URL参数解析为一个对象,如:var url = “http://witmax.cn/index.php?key0=0&key1=1&key2=2″
URL的编码规则:每对name/value由&;符分开;每对来自表单的name/value由=符分开。如果用户没有输入值给这个name,那么这个name还是出现,只是无值
思路是这样的:
1.用?将url拆成两部分,第一部分为:http://witmax.cn/index.php,第二部分为:key0=0&key1=1&key2=2。也就是将地址和参数分开,保存在一个数组中。
1 var arr = url.split('?'); 2 console.log(arr.toString());
结果:
2. 在第一的基础上将之前的第二部分,也就是参数部分,用&拆成多个部分,如key0=0,key1=1。然后用=号将键值对拆开,key,value。
1 arr = arr[1].split('&'); 2 console.log(arr.join(',')); 3 for(var i = 0, len = arr.length; i < len; i++){ 4 var a = arr[i].split('='); 5 params[a[0]] = a[1]; 6 }
控制台输出:
下面给出完整的代码:
1 <script type="text/javascript"> 2 /* 3 * 将URL参数解析为一个对象 4 * @param url 被解析的url地址。 5 * 如:http://witmax.cn/index.php?key0=0&key1=1&key2=2 6 * */ 7 function parseQueryString(url){ 8 /*如果地址为空或者url没有参数则直接返回空null*/ 9 if(url == null || url.indexOf('?') == -1){ 10 return null; 11 } 12 var params = {}; 13 /* 14 * 用?将url拆成两部分,第一部分为:http://witmax.cn/index.php 15 * 第二部分为:key0=0&key1=1&key2=2 16 * */ 17 var arr = url.split('?'); 18 console.log(arr.toString()); 19 if(arr.length <= 1){ 20 return params; 21 } 22 /* 23 * 将之前的第二部分用&拆成多个部分,键值对 24 * 然后用=号将键值对拆开,key = value 25 * */ 26 arr = arr[1].split('&'); 27 console.log(arr.join(',')); 28 for(var i = 0, len = arr.length; i < len; i++){ 29 var a = arr[i].split('='); 30 params[a[0]] = a[1]; 31 } 32 return params; 33 } 34 console.log(parseQueryString('http://witmax.cn/index.php? key0=0&key1=1&key2=2')); 35 </script>