在同一数组上运行外部循环时更改数组
Altering the array while an outer loop is still running on that same array
我有一个遍历数组的循环,并且删除其中的一些元素。
但是由于它从循环的同一数组中删除了元素,因此会产生一些问题。
在这里,我有Players
,我想从中删除player2
Players = [];
Players.push('player1');
Players.push('player2');
Players.push('player2');
Players.push('player2');
Players.push('player3');
Players.push('player2');
Players.push('player2');
Players.push('player2');
function check() {
for (var i = 0; i < Players.length; i++) {
if (Players[i] == 'player2')
kick(Players[i])
};
}
function kick(player) {
for (var i = 0; i < Players.length; i++) {
if (player == Players[i]) {
Players.splice(i, 1);
break;
}
};
}
但
check();
console.info(util.inspect(Players));
输出
[ 'player1', 'player3', 'player2', 'player2' ]
我该怎么做才能纠正这个问题?
令人兴奋的技巧:向后运行数组。
您遇到了"并发修改"场景(拼接出位置 i 处的元素会更改其后所有元素的位置),因此请通过以下方式避免这种情况:
for(i=arr.length-1; i >=0; i--) {
// ...
if (shouldberemoved) {
arr.splice(i,1);
}
}
现在,您可以根据需要删除任意数量的元素,而不会影响其前面的元素。
为什么不以相反的顺序运行循环。
for (var i = Player.lenght; i < 0; i--)
然后,如果您删除,您将不会寻找这些元素。
相关文章:
- javascript:数组循环
- 如何将数组循环到JSON代码中
- 而与数组循环
- JavaScript 数组/循环不起作用
- AJAX在数组循环中调用,只在上一次完成后调用next
- 数组循环以获取单个值
- JavaScript数组循环
- Javascript 2D数组循环停止
- 通过Javascript中的JSON数组循环
- 为什么以下 forEach 数组循环未返回未定义
- 如何在数组循环中过滤数据
- 如何在数组循环 222 中过滤数据
- 数组循环以确定范围平均值
- 对象的数组循环
- 对象键及其值的数组循环
- 虽然的缺点!未定义的数组循环
- 数组循环导致无限循环
- 数组循环 - 处理下拉列表中的空值
- 在 Node 中连接数组循环.js glob 结果
- JavaScript 图像数组循环