2013-04-23 175 views
0

對不起,我覺得這是一個愚蠢的問題,我搜索了很多,我找不到我的答案。從JavaScript中的對象數組中獲取對象

我有一個JavaScript中的數組,我插入了一堆元素。麻煩的是我不能再獲取元素的值,我想我得到了實際數組的屬性。以下是我正在做的和我正在做的事情。先謝謝您的幫助。這不是完整的遍歷方法,它實際上經歷了很多次。當我以前剛剛擁有一個關聯數組[items] [a]時,它可以很好地工作。

var element = { html: "", group: "" }; 
var array = []; 

function traverse(o) { 
    for (var key in o) { 
     element.html = "<li class='item'>" + key + " : </li>"; 
     element.group = b; 
     array.push(element); 
    } 
} 

我想打印每個元素的html,問題是我每次只從第一個元素獲取.html。

function printElements() { 
    for (item in array) { 
     var element = array.pop(); 
     console.log(element.html); 
    } 
} 

我也試過了。

function printElements() { 
    for (item in array) { 
     console.log(array.html); 
    } 
} 

我想保持數組完整,我不想彈出和我只想打印它們的元素。

+0

在數組中使用'for-in'會導致JavaScript中的錯誤。 – 2013-04-23 16:23:58

回答

1

的主要問題ISN不能將數據從數組中取出,它從不首先進入數組。

你沒有一堆數組中的元素,你只有一個元素,你改變並添加到數組中。當你把它放在數組中時,它不會被複制,它只是對放置在數組中的元素的引用。你最終會得到一個數組,其中引用了相同的單個元素。

創建的循環每次迭代的新元素,當你填充它:

for (var key in o) { 
    var element = {}; 
    element.html = "<li class='item'>" + key + " : </li>"; 
    element.group = b; 
    array.push(element); 
} 
+0

轉,這是我的問題。當打印數組時,我一直得到相同的值,所以我想我只是訪問數組的屬性而不是其中的對象。原來我只是沒有創建一個新的元素。感謝您的參與,並感謝您的幫助。 – recneps 2013-04-23 16:34:03

0

使用一個簡單的for循環,而不是:

for (var i = 0; i < array.length; i++) { 
    var item = array[i]; 
    // do stuff 
} 

這是不妥當的使用更好的for循環語法對數組在JavaScript中,因爲他們將通過所有鍵/值對數組中只是重複,不數組數字鍵。這是因爲數組也是對象,並且for ... in循環語法不區分它們。

0

您沒有使用迭代的對象,而不是你使用數組...更改此:

function printElements() { 
    for (item in array) { 
     console.log(array.html); 
    } 
} 

這樣:

function printElements() { 
    for (item in array) { 
     console.log(array[item].html); 
    } 
} 

jsfiddle

+0

'item'包含密鑰,而不是值。它應該是'數組[item] .html' – Uby 2013-04-23 16:22:08

0

這樣來做:

var array = []; 

function traverse(o) { 
    for (var key in o) { 
     var b = 'b'; // if that is what you have ment 
     var element = { html : "<li class='item'>" + key + " : </li>", group : b}; 
     array.push(element); 
    } 
} 

function printElements() { 
    for (var item=0; item<array.length; item++) { 
     console.log(array[item].html); 
    } 
} 

這是因爲它是不是安全的用於每個數組的情況下,你應該有每個數組元素的新對象。 請確保不要在數組元素上使用刪除。