2012-07-08 231 views
0

This旨在創建一個二維數組對象,這將允許我通過銀行[a] [b]訪問任何對象(「剪輯」),其中[a]是「銀行」,[b]是「剪輯」。完美地工作 - 不幸的是,這段代碼是爲了查看一些外部文件並查看它們的屬性。這些文件已經根據它們的一些屬性組織在一個「數組」中。最初我被告知這將是一個8x8陣列,但現在事實證明這將是一個16x32陣列,並且需求指定了陣列中的4x2選擇組。將外部二維數組映射到另一個二維數組(javascript)

換句話說,

banks[0][0].track = 0 
banks[0][0].slot = 0 
banks[0][3].track = 3 

banks[0][3].slot = 0 
banks[0][4].track = 0 
banks[0][4].slot = 1 

banks[0][7].track = 3 
banks[0][7].slot = 1 
banks[15][0].track = 0 

banks[15][0].slot = 31 
banks[15][3].track = 3 
banks[15][3].slot = 31 

banks[16][0].track = 3 
banks[16][0].slot = 0 
banks[16][4].track = 3 

banks[16][4].slot = 1 
banks[63][0].track = 11 
banks[63][0].slot = 30 

banks[63][4].track = 11 
banks[63][4].slot = 31 

我需要迭代地創建「剪輯」的64×8 2D陣列,但在設置這些剪輯的上述特性的同時,如圖所示。似乎很清楚,相關的數學屬於剪輯對象。但是,我看不到數學。任何建議將不勝感激。

+0

如果'banks [a] [b]'本身就是一個「剪輯」,那麼爲什麼'banks [a] [b]'具有'clip'屬性?另外,爲什麼這裏的例子有'clip'屬性,但是你鏈接的示例代碼不是?至少在我看來,這個問題還不清楚。 – 2012-07-08 17:28:54

+0

編輯以符合您的建議 – jamesson 2012-07-08 17:36:27

回答

0

聽起來像是你需要這個:

var theirBanks = [[...], [...], ...]; // 16*32 array of Clip objects 

var x = 2; // reduce outer array to one of half length 
var y = 4; // reduce inner arrays to one of fourth length 
function reduce(sel) { 
/* gets: a 2*4 selection of clips from theirBanks 
returns: a new clip for banks */ 
    ... // not sure how you want this to be done 
} 

var banks = new Array(theirBanks.length/x); 
for (var i=0; i<banks.length; i++) { 
    banks[i] = []; 
    for (var j=0; j<theirBanks.length/y; j++) { 
     var selection = []; 
     for (var k=i*x; k<(i+1)*x; k++) 
      selection.push(theirBanks[k].slice(j*y, (j+1)*y)); 

     banks[i][j] = reduce(selection); 
    } 
} 
// banks is now a 8*8 array 

的腳本構建從(二維)陣列2個* 4個選項,讓您減少他們到一個新的對象,並返回新的,小(二三維)陣列。