错误: 列列表 A[i] 未定义
Error: columnListA[i] is undefined
当我尝试从列列表 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;
,只需将变量定义为小于对象的长度
相关文章:
- Jplayer播放列表未定义
- 从angularjs中的下拉列表中删除未定义的值
- 调用.ajax方法得到未定义的json结果,返回json格式列表<字符串>
- 为什么来自.getJSON的名称在声明为列表(JavaScript / JQuery)的索引后仍未定义
- Vue.js 1.0.15 过滤列表无法读取未定义的属性
- a不同列列表的未定义或空引用的数据排序错误
- 当不处于编辑模式时,下拉列表中的Kendo单元格值显示为未定义
- 绑定到剑道下拉列表未定义
- 淘汰Viewmodel+selecteditem->嵌套列表”;未定义”;
- 旧版浏览器中类列表“未定义”的解决方法
- $_GET从生成的列表是未定义的显示页面
- 谷歌地图API-格式化的电话号码显示为未定义的列表在侧栏上
- 未定义Firebase快照列表
- 在语义UI搜索下拉列表中获得未定义值
- Javascript TypeError声明列表未定义
- reduce方法创建新列表,为什么未定义
- Javascript对象列表返回null或未定义,但不是
- 获取返回未定义的已单击列表项的ID
- text'未定义'尝试访问json列表时显示
- 映射未定义的 ReactJS 代码中的待办事项列表应用程序