首页 新闻 赞助 找找看

有关放入数组元素问题

0
悬赏园豆:5 [已解决问题] 解决于 2015-09-02 19:33

题目:请编写一个JavaScript函数 parseQueryString,它的用途是把URL参数解析为一个对象,如:var url = ”http://www.taobao.com/index.php?key0=0&key1=1& key2=2…..”
var obj = parseQueryString(url);
alert(obj.key0) // 输出0

 1 var url="http://www.taobao.com/index.php?key0=0&key1=1&key2=2";
 2 function parseQueryString(url){
 3         var str=url.split("?")[1];
 4         var items=str.split("&");
 5         var result={};            
 6         var arr=[];
 7        for(var i=0; i<items.length; i++){
 8              arr=items[i].split('=');
 9              result[arr[0]]=arr[1];//这句不明白?
10        }
11       return result;
12 }
13 var obj=parseQueryString(url);
14 alert(obj.key1);
这里不明白的是:result[arr[0]]=arr[1];在for循环结束后,按理说应该是key2=2将之前的key1=1和key0=0,覆盖了的呀?为什么最后alert(obj.key1)时仍旧能打印出来key1的值呢????
小猪冒泡的主页 小猪冒泡 | 初学一级 | 园豆:187
提问于:2015-09-01 22:46
< >
分享
最佳答案
0

result是个对象

第一次循环

result[arr[0]]=arr[1];等价于result["key0"]=0;

第二次循环

result[arr[0]]=arr[1];等价于result["key1"]=1;

收获园豆:2
powerixao | 菜鸟二级 |园豆:401 | 2015-09-02 09:25

您好,谢谢您的指导,我想再问一下,是不是这样理解:

第一次将key0放入arr[0]中,将0放入arr[1]中;

第二次将key1放入arr[0]中,将1放入arr[1]中;

第三次将key2放入arr[0]中,将2放入arr[1]中。

在arr数组中arr[0]和arr[1]每次运行都被覆盖了,而在对象result中却因为不同的属性名称而被保留下来。

是这样子的吗?麻烦您啦!

小猪冒泡 | 园豆:187 (初学一级) | 2015-09-02 11:38

@小猪冒泡: 就是这样的,要是名字一样了就会被覆盖

powerixao | 园豆:401 (菜鸟二级) | 2015-09-02 15:54
其他回答(2)
0

其实for循环内部是这样的:

result.key0 = 0;

result.key1 = 1;

result.key2 = 2;

这样写你还会觉得后面的把前面的覆盖掉吗?属性名称不一样,不会覆盖的。

收获园豆:1
ThreeTree | 园豆:1490 (小虾三级) | 2015-09-02 08:59

您好,谢谢您的指导,我想再问一下,是不是这样理解:

第一次将key0放入arr[0]中,将0放入arr[1]中;

第二次将key1放入arr[0]中,将1放入arr[1]中;

第三次将key2放入arr[0]中,将2放入arr[1]中。

在arr数组中arr[0]和arr[1]每次运行都被覆盖了,而在对象result中却因为不同的属性名称而被保留下来。

是这样子的吗?麻烦您啦!

支持(0) 反对(0) 小猪冒泡 | 园豆:187 (初学一级) | 2015-09-02 09:15
0

就和map与哈希的差不多,就是键指对的形式

收获园豆:2
稳稳的河 | 园豆:4216 (老鸟四级) | 2015-09-02 09:18

您好,谢谢您的指导,我想再问一下,是不是这样理解:

第一次将key0放入arr[0]中,将0放入arr[1]中;

第二次将key1放入arr[0]中,将1放入arr[1]中;

第三次将key2放入arr[0]中,将2放入arr[1]中。

在arr数组中arr[0]和arr[1]每次运行都被覆盖了,而在对象result中却因为不同的属性名称而被保留下来。

是这样子的吗?麻烦您啦!

支持(0) 反对(0) 小猪冒泡 | 园豆:187 (初学一级) | 2015-09-02 11:38

@小猪冒泡: 他每次都arr=items[i].split('=')重新赋值了,其实result与arr是不同的数据类型,arr是数组类型,result保存的是KEY,与value,key是不允许相同的,value是允许相同的,所以result是一个集合类型的,相当与add操作

支持(0) 反对(0) 稳稳的河 | 园豆:4216 (老鸟四级) | 2015-09-02 12:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册