JavaScript - 在迭代期间添加/删除对象数组的元素

标签 javascript arrays loops

我有一个案例,我需要遍历一个对象数组,检查每个元素的条件,删除现有对象并根据条件的结果添加新对象。我目前的代码如下,但当然不起作用。

在某些迭代中添加/删除新元素时迭代数组的正确方法是什么。

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/

相关文章:

Javascript数组函数?

c - 使用 FTS fts_open() 时 strlen 中的段错误

javascript - JavaScript 中数组到字符串的转换

C:使用指针打印出数组每个元素的值和内存位置?

loops - 嵌套循环 Smalltalk

C中的更改计算程序

javascript - jquery Click To EDIT 需要改进建议

javascript - 从js请求查询字符串中提取值

javascript - MDL-菜单右下角离屏

python - 调用函数并打印函数名称