2012-07-08 160 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个选项,让您减少他们到一个新的对象,并返回新的,小(二三维)阵列。