gpt4 book ai didi

javascript - 在 JavaScript 中删除对象时出错

转载 作者:行者123 更新时间:2023-12-03 06:06:48 26 4
gpt4 key购买 nike

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

HTML:

<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代码:

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);
}

对象列表如下所示:

List of objects

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

Uncaught TypeError: Cannot read property 'reason' of undefined

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

更新:

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

enter image description here

最佳答案

如果从 DataMixin.data.holidayList 中删除对象,则无法再次从 0 索引到 Object.keys(DataMixin.data.holidayList).length 遍历对象。因为您删除了其中一个字段(假设索引为 3 的对象),所以函数将执行此部分时:

//i == 3
if(self.deletingId == DataMixin.data.holidayList[i+1].reason){
//code
}

您将收到无法读取未定义属性“原因”的错误,因为您删除了此字段。你应该使用这个:

for (var property in DataMixin.data.holidayList){
if (DataMixin.data.holidayList.hasOwnProperty(property)){
//put your code for each property here
}
}

或者您可以使用此方法:

Object.keys(obj).forEach(function(key,index) {
// key: the name of the object key
// index: the ordinal position of the key within the object
});

关于javascript - 在 JavaScript 中删除对象时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39505775/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com