2016-11-09 3 views
0

schaffe ich habe die Matrix 3x3 aus 1-9bewegen Matrix 3x3 Array rechts und nach oben

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'); 
    } 
} 

Und das Ergebnis wird sein:

1 2 3 
4 5 6 
7 8 9 

Wie es möglich zu machen, um die Matrix nach rechts zu bewegen und dann nach oben wie diese

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

ich weiß, was wie Spleiß oder usw., aber ich habe zu verwechseln, wie sie umzusetzen :( Danke! :)

+0

ist es 312 oder 321.645.987 – Geeky

+0

so wird er nach rechts von 1 2 3 3 1 2 alle Elemente bewegen – Rakhadin

+0

wie Hausaufgaben klingt –

Antwort

0

Sie könnten es tun, indem Sie die Elemente der alten Matrix in eine neue Matrix in der Reihenfolge transkribieren, die sie sein müssen, um die Übersetzung zu erreichen.

move-right:

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]; 
    } 
} 

move-up:

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]; 
    } 
} 

Der gesamte Trick durch den Ausdruck in dem Datenindex durchgeführt wird, eine modulo unter Verwendung von 1 zu zählen und umschlingen zu 0.

0

Sie könnten den neuen Index in einer einzelnen Schleife berechnen.

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);

Verwandte Themen