我有一个案例,我需要遍历一个对象数组,检查每个元素的条件,删除现有对象并根据条件的结果添加新对象。我目前的代码如下,但当然不起作用。
在某些迭代中添加/删除新元素时迭代数组的正确方法是什么。
var arrayOfObjects = [] // a list to store objects of the same time
for(var i = 0; i < 5; i++){
arrayOfObjects.push(new someClass());
}
while(true){
for(var obj in arrayOfObjects){
// some conditional check on obj
// if check is true, delete the obj from array & add a new object
arrayOfObjects.splice(arrayOfObjects.indexOf(obj),1);
arrayOfObjects.push(new someClass());
}
}
最佳答案
在迭代期间修改对象/数组是一种反模式。后果是不可预测的。例如。循环也会对新添加的项目进行迭代,并且可能会在每次迭代中添加一个新项目。因此存在无限循环。
更好的解决方案是将项目复制/添加到新的空对象/数组。
var result = [];
arrayOfObjects.forEach(function(obj) {
if(isCopyRequired(obj)) {
result.push(obj);
}
if(isNewObjectRequired(obj)) {
result.push(new someClass());
}
});
关于JavaScript - 在迭代期间添加/删除对象数组的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33949168/