iT邦幫忙

2025 iThome 鐵人賽

DAY 22
0

本章的內容為開發一個小專案,該小專案為在某虛擬村莊收送貨的程式
主要的程式碼在這裡

初始資料

虛擬村莊的路線資料
起點-終點

const roads = [
  "Alice's House-Bob's House",   "Alice's House-Cabin",
  "Alice's House-Post Office",   "Bob's House-Town Hall",
  "Daria's House-Ernie's House", "Daria's House-Town Hall",
  "Ernie's House-Grete's House", "Grete's House-Farm",
  "Grete's House-Shop",          "Marketplace-Farm",
  "Marketplace-Post Office",     "Marketplace-Shop",
  "Marketplace-Town Hall",       "Shop-Town Hall"
];

將原始陣列轉為 起點至終點的物件資料

轉換資料結構,有助於讓我們知道從自某地點出發,可以到達哪些地方

function buildGraph(edges){
    // create graph from null to prevent unexpected inherit property
    let graph = Object.create(null);
    function addEdge(from , to){
        if(graph[from] == null){
            // 如果物件
            graph[from] = [to];
        }else{
            graph[from].push(to);
        }
    }
    /*
    split roads into 2d array as '[[from , to], [from , to]..]'
    then extract from/to locations from array
    pass from/to location to helper function which generate graph
    */
    for(let [from , to] of edges.map(value=> value.split("-"))){
        /*
        因為路線是雙向的
        所以要反向執行 addEdge 
        */
        addEdge(from , to);
        addEdge(to , from);
    }
    return graph;
}

這時候可以看見資料被整理如下方的格式

{
Alice's House: ["Bob's House", 'Cabin', 'Post Office'],
Bob's House: ["Alice's House", 'Town Hall'],
Cabin: ["Alice's House"],
Daria's House: ["Ernie's House", 'Town Hall'],
Ernie's House: ["Daria's House", "Grete's House"],
Farm: ["Grete's House", 'Marketplace'],
Grete's House: ["Ernie's House", 'Farm', 'Shop'],
Marketplace: ['Farm', 'Post Office', 'Shop', 'Town Hall'],
Post Office: ["Alice's House", 'Marketplace'],
Shop: ["Grete's House", 'Marketplace', 'Town Hall'],
Town Hall: ["Bob's House", "Daria's House", 'Marketplace', 'Shop']
}

上一篇
Chapter 6 物件的秘密 練習題-day21
下一篇
Chapter 7 實作專案-2-day23
系列文
溫故而知新:Eloquent Javascript 閱讀筆記26
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言