![](/img/trans.png)
[英]JavaScript returning array length of 0, but correct length in console
[英]Javascript array not returning the correct length
這可能真是愚蠢,但對於我的一生,我看不到。
我有用字符串填充數組的代碼,然后ii想要遍歷該數組並將值添加為select控件中的選項。 但是由於某種原因,當我調用length屬性時,它返回0,但是如果我使用console.dir在控制台中顯示該數組,則它中包含數據。
這是代碼:
var sectors = new Array();
// code to add values
$.getJSON("get/tech_info.php", {uid:json.uid}, function(data){
$.each(data, function(i, json){
if($.inArray(json.area, sectors) == -1)
{
sectors[sectors.length] = json.area;
}
});
});
console.dir(sectors);
var sec = "#mainSectors" + count;
console.log(sectors.length); // returning 0
for ( var i=0; i != sectors.length; i++ ){
console.log("bla bla bla");
$(sec).append(
$("<option></option>").html(sectors[i])
);
}
這是cosole.dir數據,您可以看到其中的數據:
//secotrs
Array[0]
0: "Industrial"
1: "Commercial"
length: 2
__proto__: Array[0]
您正在撥打Ajax電話。 Ajax是異步的 ! 調用( for
循環)之后的代碼在執行回調之前運行(並填充了數組)。
將所有依賴於sectors
的代碼放在回調中:
var sectors = [];
$.getJSON("get/tech_info.php", {uid:json.uid}, function(data){
$.each(data, function(i, json){
if($.inArray(json.area, sectors) == -1)
{
sectors.push(json.area);
}
});
var sec = "#mainSectors" + count;
console.log(sectors.length); //
for ( var i=0; i != sectors.length; i++ ){
console.log("bla bla bla");
$(sec).append(
$("<option></option>").html(sectors[i])
);
}
});
更新:
關於console.dir
的輸出:這是我假設的。 當您在控制台中展開條目時(而不是在進行調用時),將獲取對象的屬性。
例:
> a = [];
[]
> console.dir(a)
▸ Array[0]
undefined
> a.push(5)
1
現在,單擊Array[0]
旁邊的標記時,我得到:
▾ Array[0]
0: 5
length: 1
▸ __proto__: Array[0]
其中一個會認為它不顯示0: 5
,因為它是后來添加(后console.dir
調用)。
在向數組中添加內容之前,您正在顯示length
屬性(帶有console.log
),因此我想那里的長度是0。 之后,您將循環一個空數組。
此外,如果扇區具有length
,則for ( var i=0; i != sectors.length; i++ )
可以無休止地運行,因為當它不是ectors.length時它會跳過i
並繼續前進。 使用i<sectors.length
。
我想為此行sectors[sectors.length] = json.area;
扇區不在范圍內var sectors = new Array();
應該在任何功能之外的主要范圍內
以下內容不應該:
if($.inArray(json.area, sectors) == -1)
是
if($.inArray(json.area, sectors) != -1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.