Javascript 避免嵌套在循环中

Javascript 避免嵌套在循环中,javascript,arrays,loops,Javascript,Arrays,Loops,当我试图在数组和对象中查找两个相同的值对时,我遇到了in循环的问题: for (features in geodata.features) { if (geodata.features[features].geometry.type == 'Point') { ..... } else if (geodata.features[features].geometry.type == 'LineString') { for (itema in netw

当我试图在数组和对象中查找两个相同的值对时,我遇到了in循环的问题:

for (features in geodata.features) {
    if (geodata.features[features].geometry.type == 'Point') {
        .....
    } else if (geodata.features[features].geometry.type == 'LineString') {
        for (itema in networkElemente) { //Here is the part whrere it gets problematic
            for (itemb in networkElemente) {
                if (networkElemente[itema].uuid == geodata.features[features].properties.a.ne.uuid && networkElemente[itemb].uuid == geodata.features[features].properties.b.ne.uuid) {
                    console.log('klappt');
                    var intraOrtsVerbindung = L.polyline([[networkElemente[Number(itemb)].coords.lat,networkElemente[Number(itemb)].coords.lng],[networkElemente[Number(itema)].coords.lat,networkElemente[Number(itema)].coords.lng]], {   
                        weight: 5,
                        color: 'green',
                        opacity: 1,
                    }).addTo(map);
                }
            }
        }
    }
}
我有数组
networkElemente
geodata.fea。a
.b
。现在我想看一下,如果
geodata…a
有一个条目与
networkElemente
相同,而…
b
也有一个条目,如
networkElemente
。这可以很好地处理这些嵌套循环,这将不必要地经常执行部件。我想分离循环,这样如果
networkElemente.length
将为1000,则不会记录“klappt”100万次,而只记录2k次。所以结果是一样的,但不经常


谢谢

欢迎来到StackOverflow

除了在中使用中的,而您可能需要中的之外,这里的问题是组合数学

最简单的优化是永远不要对同一对进行两次检查。您可以使用常规的for…循环
并偏移嵌套循环的索引来完成此操作:

var networkElemente=[];
while(networkElemente.length<1000){
networkElemente.push(networkElemente.length+1);
}
var计数=0;
对于(var a=0;aconsole.log(“Count:+Count”)您可以使用一个,并将
uuid
作为所需数据的访问器,而不是使用嵌套循环。然后检查两者是否都存在,并创建poyline

var networkElementeMap = new Map(networkElemente.map(o => [o.uuid, o])),
    elementA = networkElementeMap.get(geodata.features[features].properties.a.ne.uuid),
    elementB = networkElementeMap.get(geodata.features[features].properties.b.ne.uuid);

if (elementA  && elementB) {
    console.log('klappt');
    var intraOrtsVerbindung = L.polyline([
            [elementB.coords.lat, elementB.coords.lng],
            [elementA.coords.lat, elementA.coords.lng]
        ], {   
            weight: 5,
            color: 'green',
            opacity: 1,
        }).addTo(map);
}

在JavaScript中,您应该对
for
循环使用
of
,而不是在
中使用
,这样做并不能解决问题……。您是在反向操作。不到1公里怎么样?(编辑:修正代码)改进版:这很快。。。。非常感谢。虽然这对你来说很容易,但你帮了大忙。谢谢你不想写个答案让我接受吗?哈哈,我甚至不能对你的评论投赞成票。。。