2016-11-09 63 views
0

我已创建1-9移动3×3矩阵阵列右上方

var data = ["1", "2", "3", "4", "5", "6", "7", "8", "9" ]; 

var i = 0; 
for (var r = 0; r < 3; r++) { 
    document.write('<br>'); 
    for (var c = 0; c < 3; c++) { 
    document.write(data[i++]); 
    document.write('&nbsp'); 
    } 
} 

矩阵3x3至其结果将是:

1 2 3 
4 5 6 
7 8 9 

如何使它能够移动矩阵权然后向上这样

3 1 2 6 4 5 
6 4 5 9 7 8 
9 7 8 3 1 2 

我知道像剪接或等事情,但我得到混淆它是如何实现:( 谢谢! :)

+0

是312或321645987 – Geeky

+0

所以它会从向右1三月2日至1月3日2 – Rakhadin

+0

听起来像功课 –

回答

0

您可以通过将旧矩阵的元素按照它们完成翻译所需的顺序转换为新矩阵来完成。

移动右:

int i = 0; 
for (var r = 0; r < 3; r++) { 
    for (var c = 1; c < 3+1; c++) { 
     newData[i++] = data[3*r+c%3]; 
    } 
} 

移动式:

int i = 0; 
for (var r = 1; r < 3+1; r++) { 
    for (var c = 0; c < 3; c++) { 
     newData[i++] = data[3*(r%3)+c]; 
    } 
} 

正由在数据索引的表达进行的整个招,使用模从1计数和环绕为0.

0

您可以在单个循环中计算新索引。

var data = ["1", "2", "3", "4", "5", "6", "7", "8", "9" ], 
 
    result = []; 
 

 
data.forEach(function (a, i, aa) { 
 
    result[(i % 3 + 1) % 3 + ((Math.floor(i /3) + 2) % 3) * 3] = a; 
 
}); 
 

 
console.log(result);