0

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

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

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

4

4 回答 4

1

主要问题不是将数据从数组中取出,它从一开始就永远不会进入数组。

数组中没有一堆元素,只有一个元素可以反复更改并添加到数组中。当您将它放入数组时,它不会被复制,它只是对放置在数组中的元素的引用。您最终会得到一个包含对同一单个元素的引用的数组。

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

for (var key in o) {
  var element = {};
  element.html = "<li class='item'>" + key + " : </li>";
  element.group = b;
  array.push(element);
}
于 2013-04-23T16:22:49.410 回答
0

改用简单的 for 循环:

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

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

于 2013-04-23T16:19:52.673 回答
0

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

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

对此:

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

jsfiddle

于 2013-04-23T16:20:24.183 回答
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);
    }
}

那是因为在数组的情况下使用 each 是不安全的,你应该为每个数组元素都有新的对象。确保不要在数组元素上使用 delete 。

于 2013-04-23T16:43:54.033 回答