2011-06-24 61 views
1

我一直在嘗試向我的頁面中的元素添加類,具體取決於它們是哪個數組,但我在代碼中找不到問題。我試圖找到'.b001'並添加該元素類'ct01'。 '.b005,.b002'和'ct02'等類似。 PadDigits在數字前添加指定的數字0。使用multidim數組的基本問題

謝謝!

function PadDigits(n, totalDigits) { 
    n = n.toString(); 
    var pd = ''; 
    if (totalDigits > n.length) 
    { 
     for (i=0; i < (totalDigits-n.length); i++) 
     { 
      pd += '0'; 
     } 
    } 
    return pd + n.toString(); 
} 

var filatrans = new Array(); 
filatrans[0] = '1'; 
filatrans[1] = '5 2'; 
filatrans[2] = '9 6 3'; 
filatrans[3] = '12 10 7 4'; 
filatrans[4] = '15 13 11'; 
filatrans[5] = '26 21 18 16 14'; 
filatrans[6] = '33 27 22 19 17'; 
filatrans[7] = '40 34 28 23 20'; 
filatrans[8] = '47 41 35 29 24'; 
filatrans[9] = '54 48 42 36 30 25'; 
filatrans[10] = '61 55 49 43 37 31'; 
filatrans[11] = '68 62 56 50 44 38 32'; 
filatrans[12] = '75 69 63 57 51 45 39'; 
filatrans[13] = '82 76 70 64 58 52 46'; 
filatrans[14] = '89 83 77 71 65 59 53'; 
filatrans[15] = '96 90 84 78 72 66 60'; 
filatrans[16] = '103 97 91 85 79 73 67'; 
filatrans[17] = '110 104 98 92 86 80 74'; 
filatrans[18] = '117 111 105 99 93 87 81'; 
filatrans[19] = '124 118 112 106 100 94 88'; 
filatrans[20] = '125 119 113 107 101 95'; 
filatrans[21] = '126 120 114 108 102'; 
filatrans[22] = '127 121 115 109'; 
filatrans[23] = '128 122 116'; 
filatrans[24] = '129 123'; 
filatrans[25] = '130'; 

var w = filatrans; 
for (e=0; e<w.length; e++) { 
    fila = w[e].split(' '); 
    var out; 
    for (e=0; e<fila.length; e++) { 
     out += '.b' + PadDigits(fila[e], 3) + ', '; 
    } 
    $(out).addClass('ct' + PadDigits(e+1, 2)); 
} 
+0

你會得到什麼錯誤?什麼不按你想要的那樣工作? – Dogbert

+0

數組與什麼有什麼關係? – locrizak

+2

而你在循環中使用'e'作爲循環計數器。 – Dogbert

回答

1

與代碼的問題當然是你使用了嵌套循環相同的變量,如其他人已經提到過。

儘管你的標題,你沒有使用多維數組,你只是使用一個字符串數組,你從飛行中的每個字符串創建一個新的數組。您可以使用數組文字語法來簡化數組的創建,也可以使用實際數組而不是字符串來創建它。這樣你就不必在循環中創建數組。

我還做了一個簡化的padDigits函數。

function padDigits(n, totalDigits) { 
    n = n.toString(); 
    while (n.length < totalDigits) n = '0'+n; 
    return n; 
} 

var filatrans = [ 
    [1], 
    [5, 2], 
    [9, 6, 3], 
    [12, 10, 7, 4], 
    [15, 13, 11], 
    [26, 21, 18, 16, 14], 
    [33, 27, 22, 19, 17], 
    [40, 34, 28, 23, 20], 
    [47, 41, 35, 29, 24], 
    [54, 48, 42, 36, 30, 25], 
    [61, 55, 49, 43, 37, 31], 
    [68, 62, 56, 50, 44, 38, 32], 
    [75, 69, 63, 57, 51, 45, 39], 
    [82, 76, 70, 64, 58, 52, 46], 
    [89, 83, 77, 71, 65, 59, 53], 
    [96, 90, 84, 78, 72, 66, 60], 
    [103, 97, 91, 85, 79, 73, 67], 
    [110, 104, 98, 92, 86, 80, 74], 
    [117, 111, 105, 99, 93, 87, 81], 
    [124, 118, 112, 106, 100, 94, 88], 
    [125, 119, 113, 107, 101, 95], 
    [126, 120, 114, 108, 102], 
    [127, 121, 115, 109], 
    [128, 122, 116], 
    [129, 123], 
    [130] 
]; 

var w = filatrans; 
for (var e = 0; e < w.length; e++) { 
    var out; 
    for (var f = 0; f < w[e].length; f++) { 
     out += '.b' + padDigits(w[e][f], 3) + ', '; 
    } 
    $(out).addClass('ct' + PadDigits(e+1, 2)); 
} 
+0

非常感謝您的答覆。這非常有幫助。 :d –

0

似乎你在第二for循環重置變量e,導致它無限循環。

此外,請始終在for循環中使用關鍵字var來使這些迭代變量局部於該函數中。

還要確保您設置var out爲空字符串,或將開始作爲undefined

function PadDigits(n, totalDigits) { 
    n = n.toString(); 
    var pd = ''; 
    if (totalDigits > n.length) 
    { 
     for (var i=0; i < (totalDigits-n.length); i++) 
     { 
      pd += '0'; 
     } 
    } 
    return pd + n.toString(); 
} 

var filatrans = new Array(); 
filatrans[0] = '1'; 
filatrans[1] = '5 2'; 
filatrans[2] = '9 6 3'; 
filatrans[3] = '12 10 7 4'; 
filatrans[4] = '15 13 11'; 
filatrans[5] = '26 21 18 16 14'; 
filatrans[6] = '33 27 22 19 17'; 
filatrans[7] = '40 34 28 23 20'; 
filatrans[8] = '47 41 35 29 24'; 
filatrans[9] = '54 48 42 36 30 25'; 
filatrans[10] = '61 55 49 43 37 31'; 
filatrans[11] = '68 62 56 50 44 38 32'; 
filatrans[12] = '75 69 63 57 51 45 39'; 
filatrans[13] = '82 76 70 64 58 52 46'; 
filatrans[14] = '89 83 77 71 65 59 53'; 
filatrans[15] = '96 90 84 78 72 66 60'; 
filatrans[16] = '103 97 91 85 79 73 67'; 
filatrans[17] = '110 104 98 92 86 80 74'; 
filatrans[18] = '117 111 105 99 93 87 81'; 
filatrans[19] = '124 118 112 106 100 94 88'; 
filatrans[20] = '125 119 113 107 101 95'; 
filatrans[21] = '126 120 114 108 102'; 
filatrans[22] = '127 121 115 109'; 
filatrans[23] = '128 122 116'; 
filatrans[24] = '129 123'; 
filatrans[25] = '130'; 

var w = filatrans; 
for (var i=0; i<w.length; i++) { 
    fila = w[i].split(' '); 
    var out = "" 
    for (var j=0; j<fila.length; j++) { 
     out += '.b' + PadDigits(fila[j], 3) + ', '; 
    } 
    $(out).addClass('ct' + PadDigits(i+1, 2)); 
} 
+0

謝謝一堆:DDD –