2014-11-06 58 views
0

我有一個數組數組,其中每個內部數組包含三個項目:郵編,街道名稱和日期數組[[垃圾收集]]。重構數組的嵌套集合

用戶將提供他們的郵編和門牌號碼,並且需要向他們顯示相應的信息。在執行檢查之後,還需要能夠爲每個「集合數組」添加日期。

這是我有的代碼,但數據看起來結構很差。如何改進?

var postcodes = [ 
     ["BT161JR18", "Londonderry Park", [collectionArrayBT161JR18]], 
     ["BT161JR19", "Ballyregan Cresent", [collectionArrayBT161JR19]], 
     ["BT161JR11", "Ballyregan Road", [collectionArrayBT161JR11]], 
    ] ; 

var collectionArrayBT161JR18 = ["16/05/14", "18/06/14", "19/07/14"]; 
var collectionArrayBT161JR19 = ["17/05/14", "11/06/14"]; 
var collectionArrayBT161JR11 = ["14/05/14", "20/06/14"]; 
+0

請給出一個特定的問題,你想幫忙。問題應該包含具體問題。你可以閱讀[在這裏問一個好問題](http://stackoverflow.com/help/how-to-ask)。 – jfriend00 2014-11-06 23:16:01

+0

我不認爲你打算把每個集合數組放在一個空的數組中,但這就是你所擁有的,所以'postcodes [0] [2]'是一個數組,其中包含一個集合數組,而不是一個日期數組。 – 2014-11-06 23:19:50

回答

0

你應該做的是使用對象的數組,而不是數組的數組的數組... 例如相同的代碼可以這樣設計:

var collectionArrayBT161JR18 = ["16/05/14", "18/06/14", "19/07/14"]; 
var collectionArrayBT161JR19 = ["17/05/14", "11/06/14"]; 
var collectionArrayBT161JR11 = ["14/05/14", "20/06/14"]; 

var postcodes = [ 
     {postcode: "BT161JR18", place: "Londonderry Park", dates: collectionArrayBT161JR18}, 
     {postcode: "BT161JR19", place: "Ballyregan Cresent", dates: collectionArrayBT161JR19}, 
     {postcode: "BT161JR11", place: "Ballyregan Road", dates: collectionArrayBT161JR11} 
    ] ; 

在這條路上你不」不需要記住索引(隨着時間的推移你會忘記),而是使用邏輯名稱。

另請注意,您需要先定義日期,然後再將其包含在您的郵編結構中。


更新爲註釋:搜索日期定郵政編碼是非常直接的。

//for your code 
function findDates(pc /*postcode to search*/) 
    for (var i=0; i<postcodes.length; i++) { 
     if (postcodes[i][0] === pc) 
      return postcodes[i][2][0] 
    return false 
} 
//for suggested code 
function findDates(pc /*postcode to search*/) 
    for (var i=0; i<postcodes.length; i++) { 
     if (postcodes[i].postcode === pc) 
      return postcodes[i].dates 
    return false 
} 
+0

是的,謝謝你,我也試過這個。我遇到的問題是需要使用算法搜索陣列 例如,如果用戶輸入BT161JR18,如何在不知道郵編的索引的情況下顯示日期信息? – user3592094 2014-11-06 23:30:42

+0

那麼你需要搜索數組,直到找到需要的索引。 – DRAX 2014-11-06 23:32:01

+0

當然,感謝您的幫助 – user3592094 2014-11-06 23:35:00

-4

設置在JavaScript的陣列

var postcodes = new Array(); 
    var collectionArrayBT161JR18 = new Array(); 
    var collectionArrayBT161JR19 = new Array(); 
    var collectionArrayBT161JR11 = new Array(); 
+3

這有什麼用? – 2014-11-06 23:22:59

+3

bad_idea @good_idea – Sir 2014-11-06 23:24:05

+0

我是javascript的新手。這對我使用數組很有幫助。大衛,你有什麼可以提供的 - 你的「好主意」是什麼? – 2014-11-07 18:54:30

0

應該使用郵政編碼作爲屬性中的對象創建,而不是使用一個陣列的主容器。這樣,你不需要迭代數組來查找郵編。

var collectionArrayBT161JR18 = ["16/05/14", "18/06/14", "19/07/14"]; 
var collectionArrayBT161JR19 = ["17/05/14", "11/06/14"]; 
var collectionArrayBT161JR11 = ["14/05/14", "20/06/14"]; 

var postcodes = { 
    BT161JR18: {place: "Londonderry Park", dates: collectionArrayBT161JR18}, 
    BT161JR19: {place: "Ballyregan Cresent", dates: collectionArrayBT161JR19}, 
    BT161JR11: {place: "Ballyregan Road", dates: collectionArrayBT161JR11} 
} 
+0

你的答案提供了我的已經沒有? – DRAX 2014-11-06 23:44:31

+0

正確的數據結構。 – 2014-11-06 23:47:49

+0

這取決於。如果你需要迭代結構,那麼這將需要特別注意:http://stackoverflow.com/a/16735184 – DRAX 2014-11-06 23:49:10