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

时间:2013-04-23 16:17:46

标签: javascript arrays

抱歉,我觉得这是一个愚蠢的问题,我搜索了很多,我找不到答案。

我在JavaScript中有一个插入一堆元素的数组。麻烦的是我无法将元素的值取回,我想我得到的是实际数组的属性。以下是我正在做的和我想做的事情。在此先感谢您的帮助。这不是完整的遍历方法,它确实经历了很多次。当我以前只有一个关联数组项[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);
    }
}

我想保持数组完整,我不想弹出和我只想打印它们的元素。

4 个答案:

答案 0 :(得分:1)

主要问题不是从数组中获取数据,而是首先进入数组。

数组中没有一堆元素,只有一个元素可以更改并一遍又一遍地添加到数组中。当你把它放在数组中时它没有被复制,它只是对放在数组中的元素的引用。最终会得到一个充满对同一个元素的引用的数组。

在填充时为循环中的每个迭代创建一个新元素:

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

答案 1 :(得分:0)

使用简单的for循环:

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

在JavaScript中对数组使用更好的for循环语法是不可取的,因为它们将遍历数组中的所有键/值对,而不仅仅是数组数字键。这是因为数组也是对象,并且for ... in循环语法不区分它们。

答案 2 :(得分:0)

你没有使用迭代对象,而是使用数组......改变这个:

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

到此:

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

jsfiddle

答案 3 :(得分: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);
    }
}

这是因为在数组的情况下使用它们并不安全,并且每个数组元素都应该有新对象。 一定不要在数组元素上使用delete。