3

我有一个包含 3 个对象的数组对象。我想删除除第一个对象之外的所有对象。

这是我从 XML 获得的数据:

mrArr[0] = <Data>
                <G> "Val" = "5" </G>
           </Data>  
mrArr[1] = <Data>
                <G> "Val" = "6" </G>
           </Data>
mrArr[2] = <Data>
                <G> "Val" = "7" </G>
           </Data>

我创建了一个循环来尝试执行此操作,但它只删除了一个元素。我的循环有什么问题?:

for(var i = 1; i < myArr.length; i++){
    myArr[i].remove();
}

它只删除一个元素。

4

3 回答 3

4

由于您在每次迭代后都会改变数组,因此array.length会不断减少。因此,在您的示例中,循环仅执行一次,从而仅删除一个元素。

这是您要实现的目标的工作示例。

var nodes = document.getElementsByTagName('div');

console.log('Before removal:', nodes);

while (nodes.length > 1) {
  var node = nodes[nodes.length - 1];
  node.parentNode.removeChild(node);
}

console.log('After removal:', nodes);
<div id="div-01">Here is div-01</div>
<div id="div-02">Here is div-02</div>
<div id="div-03">Here is div-03</div>

于 2017-11-18T07:03:44.017 回答
3

数组没有函数remove。您可以使用Array#splice 之类的myArray.splice(1)

const myArray = [1, 2, 3];
console.log(myArray);

myArray.splice(1);
console.log(myArray);

如果要删除的不是第一项,则需要获取搜索项的索引并传入splicelike

const myArray = [1, 2, 3];
const index = myArray.indexOf(2);
myArray.splice(index, 1);

console.log(myArray);

或者只使用Array#filter并传递谓词

const myArray = [1, 2, 3];
const filteredArray = myArray.filter(item => item !== 2);

console.log(filteredArray);

于 2017-11-18T06:40:27.547 回答
0

JavaScript 的NodeList工作方式与 JavaScript 不同Array,您所拥有的是NodeList. 当你从 DOM 中删除/移除一个节点时,它也会从任何NodeList保留它的节点中移除。因此,您需要迭代.length您的,NodeList但您希望您的增量表达式实际增加:

dataNodes = document.getElementsByTagName("Data");
count = 0; // debug
for (i = 0; i < dataNodes.length; i) {
  console.log('Iteration #',++count,':',dataNodes); // debug
  dataNodes[i].parentNode.removeChild(dataNodes[i]);
}
<Data><G>"Val"="5"</G></Data>
<Data><G>"Val"="6"</G></Data>
<Data><G>"Val"="7"</G></Data>

上面代码片段的for循环迭代 whilei < dataNodes.length不会递增i,所以ifordataNodes.length迭代总是0。这样,它会0dataNodes每次迭代中删除索引。在控制台中,您可以通过node从 DOM 中删除来查看您也将其dataNode NodeList从 DOM 中删除:

Iteration # 1 : (3) [data, data, data]
Iteration # 2 : (2) [data, data]
Iteration # 3 : [data]
于 2017-11-21T19:08:04.700 回答