拼接不按我期望的方式工作

时间:2016-03-15 02:40:48

标签: javascript

请考虑以下事项:

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个对象。

1 个答案:

答案 0 :(得分:1)

问题是你正在改变你正在迭代的数组。因此,在第一次迭代之后,您的数组只有三个项目,当它从数组中检索第二个项目时,它将从已修改的数组中检索它。

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

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