This question already has answers here:
Remove items from array with splice in for loop
                                
                                    (5个答案)
                                
                        
                                4年前关闭。
            
                    
考虑以下:

var _processSupplementalData = function(supfData) {

    if (!supfData.length > 0) {
      return;
    }

    var sectionData = {
      label: supfData[0].label,
      supplementalLinks: [],
    }

    supfData.forEach(function(data, index, object) {
      sectionData.supplementalLinks.push(data);
      supfData.splice(index, 1);
    });

    //dataObservableArray.push(sectionData);

    console.log(sectionData);
}


我的问题很简单:

supfData是4个对象的数组。有了代码,sectionData对象在其末尾具有大小为2的supplementalLinks数组。

如何删除splice代码,现在supplementalLinks arry大小正确:4。

我如何错误地使用拼接,使得数组中只有2个对象而不是4个?

shift为我做同样的事情。

我期望发生什么?

每个项目添加到数组时,都需要从我要遍历的数组中删除。如果要迭代的数组中有4个对象,则sectionData.supplementalLinks数组中应有4个对象。

最佳答案

问题是您要对要迭代的数组进行变异。因此,在第一次迭代之后,您的数组仅包含三个项目,并且当它从数组中检索到第二个项目时,它将从修改后的数组中检索它。

如果您可以向后迭代,那么问题就消失了

for(var i=supfData.length - 1; i >-1; i++) {
  sectionData.supplementalLinks.push(data);
  supfdataCopy.splice(i, 1);
});

10-01 10:29