Javascript:for语句不处理数组中的所有元素

标签 javascript arrays iteration

我有一个数组,里面有各个段落:

var content = [ "<p>This is a paragraph 1</p>", 
                "<p>This is a paragraph 2</p>", 
                "<p>This is a paragraph 3</p>", 
                "<p>This is a paragraph 4</p>", 
                "<p>This is a paragraph 5</p>" ]

我想对数组内的每个元素执行一个简单的操作。每个段落都需要放置在一个容器中,然后从数组中删除。 这是相应的 HTML:

<div class="article">
  <div id="cell1" class="text-block">
    <div class="container"></div>
  </div>
</div>

这就是我尝试做上面描述的事情的方式:

for (i = 0; i < content.length; i++) {
  console.log("Current item: " + content[i])
  //
  var itemtoRemove = content[i];
    $("#cell1 .container").append(content[i]);
  //
  content.splice($.inArray(itemtoRemove, content), 1)
}

我也将所有内容放在一起:https://jsfiddle.net/johschmoll/1mjzu4qg/71/

基本上,一切都工作正常,但 for 语句似乎跳过了数组中的每个第二个元素。即使看过类似的案例,我也无法弄清楚原因。我在这里做错了什么?

最佳答案

由于您在循环时修改数组,因此请使用 while 循环来检查数组是否为空

while (content.length) {
  console.log("Current item: " + content[0])
  //
  var itemtoRemove = content[0];
    $("#cell1 .container").append(content[0]);
  //
  content.shift();
}

请记住,如果您所做的只是附加所有元素,那么这是不必要的。 append() 可以接受数组

$("#cell1 .container").append(content.splice(0));

关于Javascript:for语句不处理数组中的所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59582171/

相关文章:

javascript - jquery .map() 复选框

javascript - 为什么 `getComputedStyle` 不为 anchor 标记返回 "inline"?

c++ - 优化头痛 - 从查找表中删除 if's

c - strcpy 和数组的意外行为

c++ - 有没有一种方法可以在不使用递归的情况下迭代 n 维数组(其中 n 是变量)?

javascript - 如何在动画完成后重新运行动画(jQuery)?

javascript - 如何在 <div> 标签中显示图表十字准线值?

c - 所有连续子数组的最大和

r - 使用 purrr 函数的全局赋值

python - numpy.ndenumerate 以 Fortran 顺序返回索引?