2013-06-28 20 views
0

创建的数组的长度我创造了如果我要重复它包含从URL无法返回的JavaScript

var vars = [], hash; 
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&'); 

for (var i = 0; i < hashes.length; i++) { 
    hash = hashes[i].split('='); 
    vars[hash[0]] = hash[1]; 
} 

查询字符串值的数组,不会发生任何事情:

$.each(query_array, function(k, v) { 
    console.log(v); 
}); 

然后我写了

console.log(query_array.length); 

但我的阵列看起来像在Chrome控制台:

[keyword: "mercedes", redirectTo: "test.aspx", remove: function]

长度返回0.为什么?

我该如何迭代这种数组?

+0

我运行了你的函数,我认为数组实际上与你写的不同。 –

回答

2

var vars = []应该更改为var vars = {}作为创建对象。 []表示数组。

然后,$.each将工作。

此外,您可以使用location.search而不是location.href来获取查询字符串。请检查下面

var vars = {}, hash; 
var hashes = window.location.search.substring(1).split('&'); 

for (var i = 0; i < hashes.length; i++) { 
    hash = hashes[i].split('='); 
    vars[hash[0]] = hash[1]; 
} 
3

更新的代码。如果你让varsobject,不是array它会正常工作对您:

var vars = {}, hash; 
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&'); 

for (var i = 0; i < hashes.length; i++) { 
    hash = hashes[i].split('='); 
    vars[hash[0]] = hash[1]; 
} 

console.log(vars) //Object {keyword: "mercedes", redirectTo: "test.aspx", remove: function} 

您无法通过索引访问数组的元素,是不是一个号码。在你的情况 - 索引不是一个数字。

1

vars不是数组。在JavaScript数组中必须总是有整数索引。在你的情况,你使用字符串作为索引:

vars[hash[0]] = hash[1]; 

所以不要创建一个数组,只需创建一个对象:

var vars = {}, hash; 

,你就可以遍历这个对象的属性:

$.each(vars, function(k, v) { 
    console.log(k + ': ' + v); 
}); 
1

好的,我会给出详细的解释。

JavaScript中的每个对象都可以像一个Map(Dictionary)一样工作。像这样的东西。

var a = new Object(); 
a["foo"] = 10; 
a["bar"] = 20; 

...

即使是Array[])是一个对象。所以它会尊重同样的行为。像这样...

var arr = []; 
arr["foo"] = 10; 
arr["bar"] = 20; 

但是,这并不意味着你使用的数组,因为它应该被使用。即使你已经给你的数组添加了属性,你也没有向该数组添加任何元素,因为长度计数为0。所以也许你应该把计数作为一个单独的键/值对。

希望你明白。