Du hast eine Frage? Stell sie der t3n-Community!

? Beispielfragen

Um selbst eine Frage online zu stellen, melde dich bitte an.

Zur Anmeldung

javascript: Array position vorher und nachher abfragen

12 Punkte

von kyrosiii  Nerd  vor 11 Monaten

Hallo Leute
Ich habe ein Array mit Zahlen. nun möchte ich eine Ausgabe wenn eine bestimmte zahl vor einer anderen steht. Oder da hinter.

Array[“0”, “1”, “2”,“3”]
Wenn die 2 hinter der 1 steht ok.

Array[“2”, “1”, “0”,“3”]
Wenn sie vor der 2 steht auch ok.

Kann man so was machen.?

Gruss Kyros

Nachträglich bearbeitet am 02.02.12 22:25

10 Antworten

2 Punkte

von reverb  Nerd  vor 11 Monaten

Achsooooo !! Achtung Code ;)

Das letzte Alert zeigt dir noch einmal den jeweiligen Index ^^

Wir sollten Mailadressen tauschen. In einem halben Jahr ist sonst t3n ein JS-Kochbuch ^^

Nachträglich bearbeitet am 21.06.11 08:37

Code

function sortfunk(indexa,indexb) {
    return indexa-indexb;
}

var zahl1 = 3;
var zahl2 = 4;

zahlenreihe = Array(0,1,2,3,4,5);

matches = Array();


for(var i=0;i<zahlenreihe.length;i++) {
    if(zahlenreihe[i] == zahl1) {
        matches[0] = i;
    } else if(zahlenreihe[i] == zahl2) {
        matches[1] = i;
    }
}

matches.sort(sortfunk);
matches.reverse();

if((matches[0] - matches[1]) == 1) {
    alert("Die Zahlen stehen direkt hintereinander");
} else {
    alert("Die Zahlen sind zu weit auseinander");
}

alert(matches[0]+" "+matches[1]);

0 Punkte

von reverb  Nerd  vor 11 Monaten

Da es keine Suchmethode bei Arrays gibt, muss man das in einer Schleife machen. Willst du die Zahlen denn manuell angeben oder gibt es da eine dynamik hinter? Denn davon ist der Code nun abhängig.

Willst du denn wissen, ab die Zahlen direkt aneinander stehen? Denn anders macht es kein Sinn. Denn 2 Werte können im Array schlecht die gleiche Position haben ^^

Nachträglich bearbeitet am 20.06.11 22:42

0 Punkte

von kyrosiii  Nerd  vor 11 Monaten

ich muss es erklären.. also es ist ein Array das durch zufall erstellt wird. So das die position der Zahl immer anders ist. Ziel ist es dann immer rauszufinden wo eine gewisse zahl ist.
Also kann die zahl mal zwischen 2 und 4 stehen oder mal zwischen 5 und 6 oder etc.
Ich hoffe du verstehst was ich sagen will. Es geht dann drum eine funktion auf zurufen wenn die zahl neben einer bestimmten zahl steht.

Also wenn die zahl vor oder hinter der zahl ist dann führe die funktion aus.

Array[2,3,4,8,9,5] klicke ich auf die zahl 4 so soll er schauen ob sie neben der 8 steht, dann führe die funktion aus.

Ich muss ein schiebepuzzel machen. 1 2 3 4 5 6 7 8

klicke ich auf die 4 und ist diese neben der 8 so tausche die positionen.

0 Punkte

von kyrosiii  Nerd  vor 11 Monaten

Ich habe deinen Code mal versucht.
Nun ist es aber seltsam immer wenn ich ihn aufrufe nimmt er eine andere Zahl?

Nur am anfang die beiden Variablen.

Grins

0 Punkte

von reverb  Nerd  vor 11 Monaten

Die Variablen sind nur zum testen am Anfang mit Werten belegt. Du kannst natürlich dynamisch Zahlen an die Variable übergeben. Und denk daran, das du noch eine überprüfung machen musst, wenn sich die Puzzlelücke ganz links oder ganz rechts befindet. Denn so macht das ganze gerade keinen Sinn ^^

0 Punkte

von kyrosiii  Nerd  vor 11 Monaten

ja das war mir schon klar, ich habe es mit dynamischen zahlen gemacht.
nur lustig wenn ich die funtion mehrfach ausführe nimmt er irgendwelche zahlen.

ich dachte ich könnte das so lösen. Die aufgabe hies so:

Klickt ein Benutzer auf ein an die Lücke angrenzendes Puzzleteil (oberhalb, unterhalb, links oder rechts
davon), so rutscht das Teil in die Lücke. Der ursprüngliche Platz des Teils wird danach frei und somit zur
neuen Lücke. Klickt ein Benutzer auf ein Teil, das nach obiger Definition nicht an die Lücke angrenzt, so
passiert nichts. Diagonale Verschiebungen sind ausdrücklich ausgeschlossen.
Vorgehensweise
Verändern Sie Ihre Generierungsfunktion, um jedes Bild mit einem onclick-Handler zu versehen. Der Handler
sollte eine Verschiebungsfunktion aufrufen, die prüft, ob das angeklickte Teil an die Lücke angrenzt. Ist
dies der Fall, tauschen die Lücke und das Puzzleteil ihre Position. Realisieren Sie diese Funktionalität aber
nicht direkt. Tauschen Sie stattdessen die Werte im Array aus und rufen Sie danach innerhalb der Verschiebungsfunktion
Ihre Austauschfunktion auf.

Oder weisst du ne andere Lösung musst mir aber bitte nicht den code schreiben gell. Nur ne idee geben. Ich dachte ich frage das Array ab. klick ich auf ne zahl soll er im array schauen steht sie neben der 15 die das loch wäre. Somit soll er dann 15 mit der zu klickenden zahl ersetzten.

Ich habe schon viele lösungen gesehen mit Tabellen. Aber ich habe mir sagen lassen das es so einfacher wäre.

Im code sind so zwei drei functionen die nur für überprüfugen sind. Zum beispiel wech()

Code

var bildArray = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"];
function blankBilder() {
    for (var bildNr = 0; bildNr < 16; ++bildNr) {
        document.getElementById("bild").innerHTML += "<img src='blank.jpg' onclick = 'sortfunk();'/>";
    }
    austauschen();
}

function austauschen() {
    
    for (var bildNr = 0; bildNr < bildArray.length; ++bildNr) {
        document.images[bildNr].src = +bildArray[bildNr] + '.jpg';
    }
}

function arrayShuffle() {
    var tmp, rand;
    for (var i = 0; i < this.length; i++) {
        rand = Math.floor(Math.random() * this.length);
        tmp = this[i];
        this[i] = this[rand];
        this[rand] = tmp;
    }
}

Array.prototype.shuffle = arrayShuffle;


function mischen() {
    
    bildArray.shuffle();
    for (var bildNr = 0; bildNr < bildArray.length; ++bildNr) {
        document.images[bildNr].src = +bildArray[bildNr] + '.jpg';
    }
} 



function wech() {
	alert(bildArray);
}

function sortfunk(indexa,indexb) {
   


var zahl1 = 2;
var zahl2 = 15;



matches = Array();


for(var i=0;i<bildArray.length;i++) {
    if(bildArray[i] == zahl1) {
        matches[0] = i;
    } else if(bildArray[i] == zahl2) {
        matches[1] = i;
    }
}

matches.sort();
matches.reverse();

if((matches[0] - matches[1]) == 1) {
    alert("Die Zahlen stehen direkt hintereinander");
} else {
    alert("Die Zahlen sind zu weit auseinander");
}

alert(matches[0]+" "+matches[1]);
}

0 Punkte

von kyrosiii  Nerd  vor 11 Monaten

mailadresse habe ich dir übrigens an deine website geschickt..

0 Punkte

von reverb  Nerd  vor 11 Monaten

Es gibt mehrere Ansätze, das ganze zu lösen. Man könnte für jede Zeile des Spielbretts ein Array schreiben (Gamemap-Mapping – Mehrdimensional). Das wäre die einfachste Variante, weil du in jedem Array prüfen kannst, ob die Lücke sich am Anfang oder am Ende befindet. Wenn du nur ein Array nutzen kannst, musst du die Anzahl der Array-Elemente durch die Anzahl der Spalten nehmen. Dadurch erhälst du die Anzahl der reihen. Dann lassen sich mit Hilfe von Modulo einfach der Standort der Lücke errechnen.

Dann kannst du einfach überprüfen, ob die Elemente links oder rechts daneben sind. Hast du über Modulo erfasst, das die Lücke ganz rechts ist, so hat die tatsache, das dein angeklicktes Puzzleteil auch rechts von der Lücke ist keinen Einfluss. Genau so ist es auch mit der linken Seite.

Wenn die Differenz von matches0 und matches1 gleich der Anzahl an Spalten ist, befindet sich das angeklickte Teil entweder unter oder über der Lücke. Eine Überprüfung auf ganz unten oder ganz oben der Lücke fällt weg, da Elemente nicht existieren können, die eine unvorhergesehene Reaktion verursachen.

Das schwierige ist also das wenn die Lücke ganz links ist das Teil ganz rechts eine Zeile drüber nicht anklickbar ist. Genauso ist es, wenn die Lücke ganz rechts ist und du das Teil ganz links eine Zeile drunter anklickst.

Wenn du also überprüfst, ob die Lücke ganz links oder ganz rechts ist brauchst du nur schauen, ob das angeklickte Element nach der Lücke bzw. davor kommt. Du prüfst, ob der Abstand = 1 ist und entscheidest dann, ob getauscht wird oder nicht.

Ist Lücke ganz links und das angeklickte Teil ist laut Array links daneben, dann nicht tauschen. Steht es rechts, dann tauschen.

Ist also schon eine schwierigere Aufgabe ^^

PS: Wenn ich zu hause bin schreibe ich Mail. Aktuell bin ich auf Arbeit.

Nachträglich bearbeitet am 22.06.11 00:33

0 Punkte

von reverb  Nerd  vor 11 Monaten

Alles klar. hab dir ne Mail geschickt. Die sollte nun helfen ^^

0 Punkte

von erinb  Newbie  vor 3 Monaten

hallo ich hänge mit der selben Aufgabe … habe zwar einen anderen Grund-Code als wie das hier aufgeführte Beispiel trotzdem komme ich mit der Abfrage, wo blank steht und wohin ich verschieben darf nicht zurecht. Könnt Ihr mir dabei helfen?

Antwort schreiben

Um eine Antwort schreiben zu können, sollest du dich zuvor anmelden.

Zur Anmeldung