問題描述假如一個(gè)儲存有連線數(shù)據(jù)的數(shù)組,例:1->2->3-4let link = [
{from:1,to:2},
{from:2,to:3},
{from:3,to:4},
];需要判斷檢查數(shù)組中的數(shù)據(jù)是否有往回連接的情況,比如發(fā)生了1->2->3->1這種情況。搗鼓了半天我寫的代碼如下(不考慮兩個(gè)點(diǎn)之間有重復(fù)連接和互相連接的情況下):// 測試數(shù)據(jù)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;
}
}
}
}// 標(biāo)記是否有往回連接的情況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("出錯(cuò)");
}上面的代碼簡單的測試了下應(yīng)該沒問題,但是我自己看著都有點(diǎn)亂,有沒有什么更好的方法或者JS的新特性可以更快的解決這個(gè)問題。
檢查數(shù)組中連接關(guān)系是否有往回連接?
慕工程0101907
2019-03-06 05:03:37