簡體   English   中英

無法返回在JavaScript中創建的數組的長度

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM