問題描述假如一個儲存有連線數據的數組,例: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的新特性可以更快的解決這個問題。
檢查數組中連接關系是否有往回連接?
慕工程0101907
2019-03-06 05:03:37
