首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >删除javascript中的对象时出错

删除javascript中的对象时出错
EN

Stack Overflow用户
提问于 2016-09-15 15:54:30
回答 1查看 228关注 0票数 0

从对象列表中删除对象时出现未定义错误。

Html:

代码语言:javascript
复制
<div>
<p each="{holidayListSecondPart, i in this.holidayListSecondPart}">
    <span id="{holidayListSecondPart.description}">{holidayListSecondPart.description}</span>

    <span id="delete{i+1}" onclick="{remove}">delete</span>

    <span id="editHoliday{i+1}" onclick="{editHoliday}">edit</span>
</p>
</div>

js代码:

代码语言:javascript
复制
remove(e){
    e.target.parentNode.remove();
    console.log('DataMixin.data before delete ', DataMixin.data.holidayList);
    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("delete ID matched: ", i+1);
            console.log('ID to be deleted is: ' , DataMixin.data.holidayList[i+1]);
            delete DataMixin.data.holidayList[i+1];
        }
    }
    console.log('DataMixin.data after delete ', DataMixin.data.holidayList);
}

对象列表如下所示:

删除第一个对象后,我尝试删除抛出错误的第三个对象:

代码语言:javascript
复制
Uncaught TypeError: Cannot read property 'reason' of undefined

我确信循环逻辑有问题,但我不能理解它。我哪里错了?

更新:

我正在尝试从DOM中删除一个元素,并在单击时从Javascript对象中删除它的属性,如下所示:

EN

回答 1

Stack Overflow用户

发布于 2018-05-31 16:55:20

如果从索引中删除对象,则不能再次运行从0 DataMixin.data.holidayList到Object.keys(DataMixin.data.holidayList).length的对象。因为您删除了它的一个字段(假设是索引为3的对象),所以当函数执行此操作时:

代码语言:javascript
复制
//i == 3
if(self.deletingId == DataMixin.data.holidayList[i+1].reason){
        //code
}

您将得到undefined error的Cannot read属性'reason‘,因为您删除了此字段。您应该使用以下命令:

代码语言:javascript
复制
for (var property in DataMixin.data.holidayList){
  if (DataMixin.data.holidayList.hasOwnProperty(property)){
    //put your code for each property here
  }
}

或者,您可以使用此方法:

代码语言:javascript
复制
Object.keys(obj).forEach(function(key,index) {
// key: the name of the object key
// index: the ordinal position of the key within the object 
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39505775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档