簡體   English   中英

JavaScript數組未返回正確的長度

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

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