我创建了一个包含来自url
的查询字符串值的数组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 :(得分:3)
如果您将vars
设为object
,而不是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 :(得分: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];
}
答案 2 :(得分:1)
vars
不是数组。在javascript数组中,必须始终具有整数索引。在您的情况下,您使用字符串作为索引:
vars[hash[0]] = hash[1];
所以不要创建数组,只需创建一个对象:
var vars = {}, hash;
您将能够遍历此对象的属性:
$.each(vars, function(k, v) {
console.log(k + ': ' + v);
});
答案 3 :(得分:1)
好的,我会详细解释一下。
JavaScript中的每个对象都可以像Map(Dictionary)一样工作。这样的事情。
var a = new Object();
a["foo"] = 10;
a["bar"] = 20;
...
即使Array
([]
)也是对象。所以它会尊重同样的行为。像这样......
var arr = [];
arr["foo"] = 10;
arr["bar"] = 20;
但这并不意味着您正在使用Array,因为它应该被使用。即使你已经为数组添加了属性,也没有向数组中添加任何元素,因此长度计数为0.所以也许你应该将计数保持为单独的键/值对。
希望你理解。