错误: 列列表 A[i] 未定义

Error: columnListA[i] is undefined

本文关键字:未定义 列表 错误      更新时间:2023-09-26

当我尝试从列列表 A 中删除某个对象以及列列表 B 中存在的对象时,我得到了Error: columnListA[i] is undefined

任何人都可以告诉我一些解决方案。

我的 JSON 列表如下所示:

columnListA =[ {id:"a1", value:"XYZ"},{id:"a2", value:"ABC"},{id:"a3", value:"JHI"},{id:"a4", value:"PLM"}]
columnListB =[ {id:"a1", value:"XYZ"}]

我的代码是这样的

for ( var j = 0, selLength = columnListB.length; j < selLength; j++)
{
    for ( var i = 0, nonSelLength = columnListA.length; i < nonSelLength; i++)
    {
     if (columnListA[i].id=== columnListB[j].id)
     {
       columnListA.splice(i, 1);
     }
    }
}

你得到这个是因为你正在改变columnListA就地。删除元素后,其长度从 4 传递到 3,但仍会迭代直到 i = 3。

我建议创建一个新数组,而不是就地更改它并冒着此类错误的风险。例:

columnListA = columnListA.filter(function(nonSel) {
  return columnListB.some(function(sel) {
    return sel.id !== nonSel.id;
  });
});

Array#filter 接受一个函数,并返回一个新数组,该数组仅包含该函数返回 true 的元素。

Array#some 接受一个函数,如果该函数对数组上的所有元素都返回 true,则返回true,否则false返回。

尝试:

for ( var j = 0; j < columnListB.length; j++)
{
    for ( var i = 0; i < columnListA.length; i++)
    {
        if (columnListA[i].id === columnListB[j].id)
        {
            columnListA.splice(i, 1);
        }
    }
}

JSFiddle

从循环中删除nonSelLength = columnListA.length; i < nonSelLength;,只需将变量定义为小于对象的长度