【发布时间】:2017-01-23 13:53:16
【问题描述】:
function remove(e){
self.deletingId = e.target.parentNode.firstElementChild.id;
for(var i = 0; i<Object.keys(DataMixin.data.holidayList).length; i++){
if(self.deletingId == DataMixin.data.holidayList[i+1].reason){
console.log('matched'); //prints on deletion of 5th object and then 3rd object as well
delete DataMixin.data.holidayList[i+1];
e.target.parentNode.remove();
console.log('ID deleted is: ' , DataMixin.data.holidayList[i+1]); // still prints the value
}
}
}
在具有键/值对的 10 个对象中,我成功删除了第 5 个对象,然后删除第 3 个对象即使满足 if 条件也会引发错误:
此处出现错误:reason 在 DataMixin.data.holidayList[i+1].reason 处未定义
【问题讨论】:
-
您是否知道当您删除一个条目时数组会缩短(因此您可能会尝试访问不再存在的索引)?
-
delete在数组项上将项设置为undefined,它不会将其从数组中删除。就是说,我失去了你的逻辑,试图删除i+1。 MCVE 肯定会有所帮助。也许你应该以相反的顺序迭代 -
@FDavidov 我正在使用
onclick调用删除函数,这应该在循环内将i值设置为 0 对吗? -
您需要做的是使用
splice方法(从数组中完全删除一个对象),而不是使用for构造循环,而是将其更改为退出在您尝试访问索引超出新范围的对象之前。
标签: javascript jquery arrays javascript-objects