2017-08-04 27 views
0

我有一個名爲routerList的數組中的路由器列表。我想在我的視圖中顯示備用路由器旁邊的活動路由器。陣列中的路由器對象具有名爲HostName的屬性,該屬性具有locationID_Router#_RouterName,例如WA34_R01_ABCABC。陣列中的某個地方是另一個名爲WA34_R02_ABCABC的路由器。我想重新排序數組,所以當我使用ng時,重複這兩個路由器,所有其他匹配的對將彼此相鄰。我寫了一個函數,告訴我名稱是否相同減1字符,所以R01和R02。在這裏:配對AngularJS中的數組的類似對象

 function stringCompare(word1, word2){ 
     var differences = 0; 
     if(word1 != word2){ 
      if(word1.length == word2.length){ 
       for(i=0; i <= word1.length-1; i++){ 
        if(word1.charAt(i) != word2.charAt(i)){ 
         differences +=1; 
        } 
       } 
      } 
     } 
     if(differences == 1){ 
      return true; 
     }else{ 
      return false; 
     }; 
    }; 

然後我試圖有一個循環內的循環,以獲得對並將它們添加到一個新的數組,因爲它發現的對,但我一直通過循環無法讀取主機名部分的方式得到錯誤。

function findCouples(array){ 
      var MatchedRouters = []; 
      for(i=0;i<=array.length-1;i++){ 
       for(var i2=0;i2<=array.length-1;i2++){ 
        if(stringCompare(array[i].HostName,array[i2].HostName)){ 
         MatchedRouters.push(array[i]); 
         MatchedRouters.push(array[i2]); 
        } 
       } 
      } 
      return MatchedRouters 
     }; 

如果有更好的方法來做到這一點請讓我知道!如果沒有任何幫助,你可以給我這樣的工作,這將是驚人的。 謝謝!

+0

在JavaScript數組中有類似forEach的方法,所以您不必寫出for循環。此外,我認爲創建不同的數據結構可能會更容易。你能分享你的HTML來顯示列表嗎? – Anthony

+0

爲什麼不直接訂購它們? – dariogriffo

+0

我可能更容易擁有一個數據結構,其中的路由器= [{location:'location1',name:'name1',routers:{'1','2'}}]用於顯示 – Anthony

回答

1

當您初始化您的列表或路由器時,請創建需要排序的屬性。

喜歡的東西:

routers.forEach(function(router) { 
    router.location: getRouterLocation(router.HostName); 
    router.number: getRouterNumber(router.HostName); 
    router.name: getRouterName(router.HostName); 
}); 

然後創建你的函數getRouterLocation,getRouterNumber等。分析出你需要的值。

function getRouterLocation(hostName) { 
    return hostName.substring(0, hostName.indexOf('_'); 
} 
+0

您是天才!謝謝。我剛剛創建了一個新的數組,它攔截了HostName的最後部分,並對Name進行了排序。很簡單!爲什麼我會經歷所有額外的努力haha –

+0

太好了,很高興我能幫上忙! :) – Anthony