【发布时间】:2020-01-03 16:40:24
【问题描述】:
我有一个数组,里面有各种段落:
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 语句似乎跳过了数组中的每个第二个元素。即使看过类似的案例,我也无法弄清楚原因。我在这里做错了什么?
【问题讨论】:
-
如果要在循环遍历数组的同时操作数组,则需要从
length - 1索引开始并向后移动。因为一旦您删除第一个元素并且您的i调整为 1,您实际上是在查看最初的第三个元素 -
Array#splice改变原始数组。会是这样吗? -
content.splice在您循环时修改数组。 -
否则,从 for 循环切换到
while (content.length)循环 -
因为你刚刚遇到的问题,:)
标签: javascript arrays iteration