gpt4 book ai didi

javascript - 在循环内调用函数会破坏循环

转载 作者:行者123 更新时间:2023-12-03 08:18:05 27 4
gpt4 key购买 nike

我有一个函数可以循环 MongoDB 集合中的对象。对于一些邮件运输站来说,这都是可能的联系。一旦获得一个连接,我想立即从连接对象中删除反向连接,例如 postA=1 和 postB=2,我想删除 postA=2 和 postB=1 (removeConnection函数就是这样做的)。

我不明白为什么当我尝试在 calculateRoute 中运行该函数时,它只在控制台上返回一个“A”,而在以下情况下返回三个“A”(这是它应该做的)我把它去掉。该函数以某种方式打破了循环。

calculatedRoutes = calculateRoute(store.postid, client.postid, connections, []);

function calculateRoute(actualPost, finalPost, connections, routes) {
for(i=0; i < connections.length; i++) {
if(actualPost == connections[i].postA) {

console.log('A');

// If I remove this, the console shows A three times. If I keep this, only shows 1 time.
connections = removeConnection(connections[i].postB, connections[i].postA, connections);
}
}

return routes;
}

function removeConnection(postA, postB, connections) {
for(i=0; i < connections.length; i++) {
if(connections[i].postA == postA && connections[i].postB == postB) {
delete connections[i];
//break;
}
}

return connections;
}

最佳答案

您似乎正在修改调用removeConnection 时正在迭代的集合。我敢说,在第一个循环之后,connections.length 小于循环控制变量,这将导致循环终止。函数调用后connections的内容是什么?

一般来说,直接修改正在迭代的集合是不好的做法。更好的选择是将集合投影到包含所需值的新集合中(使用映射、过滤器等)。这样你就不会改变任何东西。

关于javascript - 在循环内调用函数会破坏循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33849864/

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