【问题标题】:Unable to delete object property in a loop无法在循环中删除对象属性
【发布时间】: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 条件也会引发错误:

此处出现错误:reasonDataMixin.data.holidayList[i+1].reason 处未定义

【问题讨论】:

  • 您是否知道当您删除一个条目时数组会缩短(因此您可能会尝试访问不再存在的索引)?
  • delete 在数组项上将项设置为undefined,它不会将其从数组中删除。就是说,我失去了你的逻辑,试图删除i+1。 MCVE 肯定会有所帮助。也许你应该以相反的顺序迭代
  • @FDavidov 我正在使用 onclick 调用删除函数,这应该在循环内将 i 值设置为 0 对吗?
  • 您需要做的是使用splice 方法(从数组中完全删除一个对象),而不是使用for 构造循环,而是将其更改为退出在您尝试访问索引超出新范围的对象之前。

标签: javascript jquery arrays javascript-objects


【解决方案1】:

在我看来 (Object.keys(DataMixin.data.holidayList).length - 1) 是 DataMixin.data.holidayList 中的最后一个属性键,所以如果你这样做 DataMixin.data.holidayList[i+1] ,在循环结束时,如果找不到对象属性。

【讨论】:

  • 但对象 DataMixin.data.holidayList 索引从 1 开始,所以这就是我这样做的原因 i+1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-03
  • 2022-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-23
相关资源
最近更新 更多