假如一个储存有连线数据的数组,例:1->2->3-4
let link = [ {from:1,to:2}, {from:2,to:3}, {from:3,to:4}, ];
需要判断检查数组中的数据是否有往回连接的情况,比如发生了1->2->3->1这种情况。捣鼓了半天我写的代码如下(不考虑两个点之间有重复连接和互相连接的情况下):
// 测试数据let link = [ {from:3,to:4}, {from:3,to:5}, {from:2,to:4}, {from:2,to:3}, {from:1,to:2}, {from:2,to:5} ];// 检查每一条线路是否有往回连接function checkLine(arr,data){ let _to = arr[arr.length-1]; for(let j=0;j<data.length;j++){ if(data[j].from === _to){ if(arr.indexOf(data[j].to)!==-1){ flag = true; }else{ arr.push(data[j].to); let _data = data.filter(item=>(item.from!==data[j].from && item.to!==data[j].to)); checkLine(arr,_data); return; } } } }// 标记是否有往回连接的情况let flag = false;// 开始for(let i=0;i<link.length;i++){ let arr = []; arr.push(link[i].from,link[i].to); let _data = link.filter(item=>(item.from!==link[i].from && item.to!==link[i].to)); checkLine(arr,_data); }if(flag===true){ console.log("出错"); }
上面的代码简单的测试了下应该没问题,但是我自己看着都有点乱,有没有什么更好的方法或者JS的新特性可以更快的解决这个问题。
暮色呼如