Javascript 避免嵌套在循环中
当我试图在数组和对象中查找两个相同的值对时,我遇到了in循环的问题: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
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;a console.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公里怎么样?(编辑:修正代码)改进版:这很快。。。。非常感谢。虽然这对你来说很容易,但你帮了大忙。谢谢你不想写个答案让我接受吗?哈哈,我甚至不能对你的评论投赞成票。。。