问题描述假如一个储存有连线数据的数组,例:1->2->3-4let 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的新特性可以更快的解决这个问题。
添加回答
举报
0/150
提交
取消