我有一种情况,我需要遍历对象数组,检查每个元素上的条件,删除现有对象并根据条件的结果添加新对象。我目前拥有的代码如下,但当然不起作用。
什么是在特定迭代中添加/删除新元素时迭代数组的正确方法。
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());
}
});