从JavaScript中的对象数组中获取对象

问题描述:

对不起,我觉得这是一个愚蠢的问题,我搜索了很多,我找不到我的答案。从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

的主要问题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

使用一个简单的for循环,而不是:

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

这是不妥当的使用更好的for循环语法对数组在JavaScript中,因为他们将通过所有键/值对数组中只是重复,不数组数字键。这是因为数组也是对象,并且for ... in循环语法不区分它们。

您没有使用迭代的对象,而不是你使用数组...更改此:

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

这样来做:

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); 
    } 
} 

这是因为它是不是安全的用于每个数组的情况下,你应该有每个数组元素的新对象。 请确保不要在数组元素上使用删除。