2013-08-23 31 views
1

我在放一些JavaScript,它們將拉入多個JSON文件,這些JSON文件的數據將在圖中使用。最終,我需要確定何時我已經達到在$.each()循環(涉及jQuery)中處理的關聯數組的絕對末端,以便觸發下一個JSON文件。我遇到了單層對象的各種解決方案...但是多層次對象呢?最後一列的最後一行如何知道它是最後一列?識別JavaScript對象或關聯數組中的最後一項

這裏有一個例子JSON我的工作:

{ 
    "Network":{ 
     "Hardware":262464, 
     "Software":53016, 
     "Internal Personnel":440202, 
     "External Personnel":188658, 
     "Outside Services":1344100, 
     "Facilities and Overhead":16172, 
     "Other":92588, 
     "Total":2397200 
    }, 
    "Wide Area Network":{ 
     "Hardware":75600, 
     "Software":18900, 
     "Internal Personnel":132300, 
     "External Personnel":56700, 
     "Outside Services":315000, 
     "Facilities and Overhead":6300, 
     "Other":25200, 
     "Total":630000 
    } 
} 

下面是我對JSON

function buildColumns(array, parent) { 
    $.each(array, function(key, value) { 
     var newParent = $('<column>'); 
     $('<columnBox>').append($('<h2>').html(key)).append(newParent).appendTo(parent); 
     if(value instanceof Object) buildColumns(value, newParent);  
    }); 
} 

循環運行循環的一個粗略的想法是僞遞歸的,如你可以看到,也可能不會最終成爲我使用的。但是你去了。

+1

我真的不明白是什麼問題。你是說你的JS代碼不工作? –

+0

在$ .each獲得.length長度的對象/數組之前,然後當您循環遍歷$ .each時,可以獲取每個子數組/ /層的長度並重復該過程,直到索引從$返回。每個匹配的長度:) –

+0

@AO你應該移動你的評論來回答。 –

回答

2

您可以通過length屬性找出陣列中有多少物品。

所以在你的例子中array.length將返回項目的數量。這是假設傳遞的變量是一個數組。

你可以爲對象做到這一點的方法是:

Object.keys(jsonObject).length 

而且,因爲我不完全相信,如果它是數組或對象你正在努力尋找長了,你可以使用下面的代碼到count方法添加到對象中找到它有多少個子:

Object.prototype.count = function() { 
    oCount = 0; 
    for(var curObj in this) 
    if(curObj.hasOwnProperty(prop)) oCount++; 
    return oCount; 
}; 

要這樣使用:

console.log(jsonObject.count()); 
+0

我的理解(無知揭示自己)是.length不能在對象,只有數組上工作。我也早些時候遇到了這個路障。 –

+0

對不起,我誤解了你的問題。我已編輯我的帖子:) – Mark

+1

請確保檢查屬性是否存在與hasOwnProperty對象。否則,您可能會得到錯誤的計數結果,因爲它也可以獲取原型鏈中的屬性。 –

0

JavaScript對象的字段順序不保證一致。無論是時間還是不同瀏覽器之間。看到這裏:Does JavaScript Guarantee Object Property Order?

所以最後一個項目並不總是相同的。

如果你想擁有最後一個項目,你需要將你的對象修改成一個數組。

{ 
    "Network": [ 
     [{"Hardware":262464}], 
     [{"Software":53016}], 
     // ... 
    ], 
    "Wide Area Network":[ 
     [{ "Hardware":75600}], 
     // ... 
    ], 
    // ... 
} 

+0

我想將JSON轉換爲數組,但是該值的基於文本的鍵不會結轉。我需要另一個數組只是將鍵與值相關聯。這將開始變得笨拙。這在PHP中會很容易。 *嘆* –

相關問題