循环内的接头似乎不起作用

时间:2018-12-26 10:11:59

标签: javascript loops splice

我正在循环到一个json对象,其中有一个对象数组。 我想从阵列中删除在iban上具有空值并且在帐号上具有超过12位数字的对象。 如果同时满足这两个条件,则我要删除该项目。 我的清单上有3项应删除,因为它们满足此条件,但只有2项被删除。

我的功能是这样的

for (var i = 0; i < benefs.length; i++) {
                var befNumberIban = benefs[i].Iban;
                var befNumber = benefs[i].AccountNumber;
  if (befNumber != null) {

    if (isBefLenght && (befNumberIban == null || befNumberIban == "")) {


        benefs.splice(i, 1);

我不明白为什么它只能删除2个符合条件的3个对象...一些关于拼接的东西?

1 个答案:

答案 0 :(得分:3)

来自splice的数组将重新索引,因此对于最后一项,我将为1,数组长度也将为1,它也不会进入循环,因此您不会在其中获得期望的结果环。您可以使用filter轻松实现这一目标。

const benefs = [{
  Iban: null,
  AccountNumber: "",
}, {
  Iban: null,
  AccountNumber: "",
}, {
  Iban: null,
  AccountNumber: "",
}]

const isBefLenght = true;
var newArray = benefs.filter(a => {
  return isBefLenght && !(a.Iban === null || a.befNumberIban === "");
})

console.log(newArray);