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>
复制代码

 

原文地址:https://www.cnblogs.com/danghuijian/p/3816879.html