[英]JavaScript: Array created by getElementsByTagName() won't return length of its elements?
[英]Unable to return length of array created in javascript
我創建了一個數組,其中包含來自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。為什么?
我如何遍歷這種數組?
如果您將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}
您不能通過索引(不是數字)來訪問數組的元素。 就您而言-索引不是數字。
var vars = []
應該更改為var vars = {}
作為創建對象。 []
代表Array。
然后, $.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];
}
vars
不是數組。 在javascript中,數組必須始終具有整數索引。 在您的情況下,您使用字符串作為索引:
vars[hash[0]] = hash[1];
因此,不要創建數組,而只需創建一個對象:
var vars = {}, hash;
並且您將能夠遍歷此對象的屬性:
$.each(vars, function(k, v) {
console.log(k + ': ' + v);
});
好的,我將對此進行詳細說明。
JavaScript中的每個對象都可以充當Map(Dictionary)。 這樣的事情。
var a = new Object();
a["foo"] = 10;
a["bar"] = 20;
...
甚至Array
( []
)都是對象。 因此,它將尊重相同的行為。 像這樣...
var arr = [];
arr["foo"] = 10;
arr["bar"] = 20;
但這並不意味着您正在使用應該使用的數組。 即使您已經向數組添加了屬性,也沒有向數組添加任何元素,因此長度計數為0。因此,也許應該將計數保留為單獨的鍵/值對。
希望你能理解。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.