Antworten auf deine Fragen:
Neues Thema erstellen

Javascript: Array Werte tauschen

Greenhorn79

Nicht mehr ganz neu hier

Hallo @all,

ich stecke mal wieder fest. Ich habe einen Javascript- Code geschrieben den ich unten beigefügt habe. Dabei geht es darum, dass die Felder der Reihe nach mit einem entsprechenden Bild angezeigt werden, nur eines bleibt frei. Je nach dem auf welches Feld man klickt, so sollen die beiden Werte im Array getauscht werden (angeklicktes Feld und freies Feld). Nun sollen die Bilder wieder entsprechend der neuen Reihenfolge ausgetauscht werden. Bis auf den Austausch an der Stelle klappt es auch super. Soweit ich es sehe, mach ich mir meine Reihenfolge im Array durch die for-Schleife in der Funktion austauschen kaputt, aber ich finde auch keine Lösung und würde mich daher über einen Tipp sehr freuen. ;-) Nachdem ich in der for-Schleife im Schleifenkopf die gleiche Variable wie im Array verwende und bei null beginne und um eins hochzähle ist es klar, dass es nicht klappt, aber eine andere Variable (beispielsweise i) bringt nix.

Liebe Grüße
Michaela

Code:
var bilder = [];

function verschieben (id) {
    for(var pos = 0; pos <bilder.length; ++pos) {
       if(bilder[pos] == 'blank') {
         bilder[pos]=id;
         break;
       }
    }
    for(var pos = 0; pos <bilder.length; ++pos) {
       if(bilder[pos] == id) {
         bilder[pos]='blank';
         break;
       }
    }
austauschen()
   }



function austauschen () {
alert('Hallo');
var feldAnzahl = spalte*zeile;
   for(var pos = 0; pos < feldAnzahl-1; ++pos) {
     alert(bilder);
     puzzleTeil = new Image;
     puzzleTeil.src = pos + ".jpg";
     document.getElementById(pos).src = puzzleTeil.src;
     bilder.push(pos);
   }
  bilder.push('blank')
}
 

mindraper

me[code].Java(Script)

AW: Javascript: Array Werte tauschen

hi.

also, um die inhalte der arrays zu vertauschen, musst du nicht via for()-schleife darüber iterieren. hier eine kleine funktion, die genau das tut, was du ( wenn ich es richtig verstanden habe ) mit verschieben() vorhattest:

PHP:
    // das ist das array. getauscht werden sollen 'ouch' und 'blank'
    var bilder = ['foo', 'ouch', 'bar', 'baz', 'blank'];
    
    // function zum neu mischen
    function shuffleArray( one, id ){
        var i, j, temp;
        // positionen im array bestimmen
        i = one.indexOf( 'blank' );
        j = one.indexOf( id );
        // einen wert zwischenspeichern. hier: 'blank'
        temp = one[i];
        // die werte vertauschen
        one[i] = one[j];
        one[j] = temp;
    }
    
    // function aufrufen, array und gesuchten wert übergeben
    shuffleArray( bilder, 'ouch' );
    
    // kontrolle ==> gibt aus: [foo, blank, bar, baz, ouch]
    console.log( bilder );
die aufrufe von console.log() waren nur zum anschauen gedacht. können natürlich raus. die andere function sah erstmal nicht direkt verkehrt aus – allerdings tut sie warscheinlich nicht das, was du möchtest. sie fügt nämlich einfach nur neue inhalte in das array ein. das bedeutet, du hast innerhalb des arrays plötzlich zwei 'blank' stehen. da besteht ein logik-fehler deinerseits, sofern ich deine intention richtig deute.

hoffe das hilft

POST SCRIPTUM
mir fällt gerade ein, der ie < 9( oder 8? ) kennt Array.indexOf nicht. in dem fall musst du eine eigene function dafür definieren:

PHP:
if( !Array.prototype.indexOf ){
    Array.prototype.indexOf = function( thing ){
        var i;
        for( i = 0; i < this.length; i = i+1 ){
            if( this[i] === thing ){
                return i;
            }
        }
        return -1;
    }
}
 
Zuletzt bearbeitet:

Greenhorn79

Nicht mehr ganz neu hier

AW: Javascript: Array Werte tauschen

Hallo mindraper,

erstmal vielen Dank für deinen Tipp. Eigentlich tut das Script schon. Ich schaffe es damit die beiden Werte im Array zu tauschen. Aber anschließend soll die src-Eigenschaft angepasst werden (Funktion austauschen). Damit will ich erreichen, dass jedes Element im Array wieder das richtige Bild erhält - also entsprechend den getauschten Werten. Da ich in der Funktion austauschen die Bilder aber über eine for-Schleife mit der Variable pos mache, weil diese ja die Elemente des Arrays beschreibt, wird meine Reihenfolge durch das ++pos wieder in eine aufsteigende Reihenfolge gebracht und das will ich nicht. Der Austausch der Arrayelemente funktioniert und dem entsprechend sollen auch die Bilder angezeigt werden.

Liebe Grüße
Micha
 

mindraper

me[code].Java(Script)

AW: Javascript: Array Werte tauschen

hi.

... wird meine Reihenfolge durch das ++pos wieder in eine aufsteigende Reihenfolge gebracht und das will ich nicht.

simple solution: dreh die schleife um.

PHP:
var pos;
for( pos = feldAnzahl -1; pos > 0; pos-- ){
    /* CODE */
}

damit wird das array statt von position 0 beginnend von der letzten position an durchlaufen. sofern "feldAnzahl" so groß ist wie die anzahl der inhalte im array - 1 ( also array.length -1 ).

was ich mit logik-fehler meinte ist folgendes:
ich sehe ja nicht mehr von deinem code als du hier zeigst, deshalb kann ich mich nur darauf stützen. daher

1. dein array "bilder" ist leer, hat also keine inhalte.

2. innerhalb von "verschieben" wird "bilder" 2 mal durchlaufen, am ende rufst du "austauschen" auf.

3. bei jedem aufruf von "austauschen", wird "bilder" ein zusätzliches 'blank' hinzugefügt durch bilder.push( 'blank' ). d. h., nach dem ersten aufruf von "austauschen" ist 'blank' einmal in bilder drinne, beim zweiten aufruf 2mal, dann 3mal usw.

4. das führt dann also beim zweiten aufruf von "verschieben" dazu, dass die function nicht mehr korrekt arbeitet. denn sie findet den wert 'blank' ja 2mal im array. ich kann mir eigentlich nicht vorstellen, dass du "verschieben" nur ein einziges mal aufrufen willst. oder täusche ich mich in dieser hinsicht?

da es ja jetzt doch schon spät ist, habe ich dir hier mal was kleines zusammengebastelt, das z. zt. noch etwas buggy ist. ansonsten sollte es aber soweit erstmal funktionieren. feilen musst du dann schon selbst :)

PHP:
var counter, maxCount, elems, indexOf, bilder = [], imgTags = [], zeile = 3, spalte = 2;	

indexOf = Array.prototype.indexOf || function( thing ){
	var i;
	for( i = 0; i < this.length; i += 1 ){
		if( this[i] === thing ){
			return i;
		}
	}
	return -1;
}

for( counter = 0, maxCount = zeile * spalte; counter < maxCount; counter += 1 ){
	var content, elem, src = counter + '.jpg';
	
	elem = document.getElementById( 'bild_' + counter );
	elem.src = src;
	
	bilder.push( src );
}

bilder.push( 'blank.jpg' );
document.getElementById( 'bild_5' ).src = 'blank.jpg';

function change(){
	var i;
	for( i = 0; i < bilder.length; i += 1 ){
		document.getElementById( 'bild_' + i ).src = bilder[i];
	}
}

function shuffle( array, id ){
	var temp, i = array.indexOf( 'blank.jpg' ),
		j = array.indexOf( id );
		
	temp = array[i];
	array[i] = array[j];
	array[j] = temp;
	setTimeout( change, 15 );
}

document.getElementById( 'bild_0' ).onclick = function(){
	shuffle( bilder, '0.jpg' );
}
document.getElementById( 'bild_1' ).onclick = function(){
	shuffle( bilder, '1.jpg' );
}
document.getElementById( 'bild_2' ).onclick = function(){
	shuffle( bilder, '2.jpg' );
}
document.getElementById( 'bild_3' ).onclick = function(){
	shuffle( bilder, '3.jpg' );
}
document.getElementById( 'bild_4' ).onclick = function(){
	shuffle( bilder, '4.jpg' );
}
document.getElementById( 'bild_5' ).onclick = function(){
	shuffle( bilder, '5.jpg' );
}

HTML seitig sieht es so aus:

HTML:
<img src="" alt="bild_0" id="bild_0">
<img src="" alt="bild_1" id="bild_1">
<img src="" alt="bild_2" id="bild_2">
<img src="" alt="bild_3" id="bild_3">
<img src="" alt="bild_4" id="bild_4">
<img src="" alt="bild_5" id="bild_5">

hoffe das hilft
 
Zuletzt bearbeitet:

Greenhorn79

Nicht mehr ganz neu hier

AW: Javascript: Array Werte tauschen

Hallo mindraper,

ich glaube ich bin dank deiner Hilfe ein großes Stück weitergekommen, auch wenn es noch nicht 100% funzt. In meiner Validierung ist noch ein Haken, weil er beim Zeilenumbruch auch diagonal zulässt, weil sich i und j ja genau um 1 unterscheiden, wobei i und j die Bildnummern sind.

Code:
function pruefen(i,j) {
    if(i-j == 1 || j-i == 1) {
        return true;
    } else {
        if(i-j == spalte || j-i == spalte) {
            return true;
        } else {
        return false;
        }
    }

}
 
Zuletzt bearbeitet:

Greenhorn79

Nicht mehr ganz neu hier

AW: Javascript: Array Werte tauschen

Habe doch noch ein größeres Problem:

Am Anfang möchte ich innerhalb einer Schleife in der Funktion mischen sehr oft die Verschiebefunktion aufrufen. Leider funktioniert das aber nicht. Das Problem liegt an break in der Schleife innerhalb der Verschiebefunktion. Nehme ich hier ein return, dann klappt das verschieben nicht mehr aber die Funktion wird dafür entsprechend der Schleife innerhalb der Funktion mischen aufgerufen. Ich poste mal meinen gesamten Code....

Code:
var bilder = [];


function verschieben(id) {
    for(var bildNr = 0; bildNr < bilder.length; ++bildNr) {
        if(bilder[bildNr] == 'blank') {
            //Bildnummer der Lücke
            i = bildNr;
            alert('Luecke ' + i);
            break;
        }
    }
    var trennPos = id.indexOf("_");
    var nr = id.substring(trennPos + 1);
    alert('teil' + nr);
    for(var bildNr = 0; bildNr < bilder.length; ++bildNr) {
        j = nr;
    }
    var status = pruefen(i,j);
    if(status== false) {
          return;
    }
    var temp = bilder[i];
    bilder[i] = bilder[j];
    bilder[j] = temp;
    alert(bilder);
    austauschen()
}

function fuellenArray() {
    var feldAnzahl = spalte*zeile;
    for(i= 0; i < feldAnzahl-1; ++i) {
    bilder.push(i);
    }
bilder[feldAnzahl-1] = ('blank');
}

function pruefen(i,j) {
    if(i-j == 1 || j-i == 1) {
        return true;
    } else {
        if(i-j == spalte || j-i == spalte) {
            return true;
        } else {
        return false;
        }
    }

}

function austauschen() {
    var feldAnzahl = spalte*zeile;

    for(var bildNr = 0; bildNr < feldAnzahl; ++bildNr) {
      var bild = document.getElementById('bilder_' + bildNr);
      bild.src = bilder[bildNr] + '.jpg';
    }
}

function mischen() {
    for (i = 0; i <100; ++i) {
        var id = Math.floor(Math.random() * (spalte*zeile + 1));
        alert(id);
        verschieben(id);
    }
}

function generieren() {
    bilder = [];
    var groesse = document.getElementById('groesse').value;
    spalte = parseInt(groesse.substr(0,1));
    zeile = parseInt(groesse.substr(2,1));
    document.getElementById("puzzle").innerHTML = '';
    //Erzeugen der Zeilen
    for (var k =0; k<zeile; ++k) {
        document.getElementById("puzzle").innerHTML = document.getElementById("puzzle").innerHTML + '<div id="zeile' + k + '"></div>';
    }
    //Erzeugen der Zeilen
    for (var i = 0; i<spalte; ++i) {
        document.getElementById("zeile0").innerHTML = document.getElementById("zeile0").innerHTML + '<img id="bilder_' + i + '" src="blank.jpg " onclick = "verschieben(id)";/>';
        document.getElementById("zeile1").innerHTML = document.getElementById("zeile1").innerHTML + '<img id="bilder_' + (i+spalte) + '" src="blank.jpg" onclick = "verschieben(id)";/>';
        document.getElementById("zeile2").innerHTML = document.getElementById("zeile2").innerHTML + '<img id="bilder_' + (i+2*spalte) + '" src="blank.jpg" onclick = "verschieben(id)";/>';
    }
   if(zeile == 4) {
       for (var i = 0; i<spalte; ++i) {
       document.getElementById("zeile3").innerHTML = document.getElementById("zeile3").innerHTML + '<img id="bilder_' + (i+3*spalte) + '" src="blank.jpg" onclick = "verschieben(id)";/>';
       }
    }
fuellenArray();
austauschen();
mischen();
 }
 

mindraper

me[code].Java(Script)

AW: Javascript: Array Werte tauschen

hi.

Code:
var bilder = [];


function verschieben(id) {
    for([COLOR="DarkOrange"]var bildNr = 0[/COLOR]; bildNr < bilder.length; ++bildNr) {
        if(bilder[bildNr] == 'blank') {
            //Bildnummer der Lücke
            i = bildNr;
            alert('Luecke ' + i);
            break;
        }
    }
    [COLOR="Red"]var trennPos = id.indexOf("_");
    var nr = id.substring(trennPos + 1);[/COLOR]
    alert('teil' + nr);
    for([COLOR="DarkOrange"]var bildNr = 0;[/COLOR] bildNr < bilder.length; ++bildNr) {
        j = nr;
    }
    var status = pruefen(i,j);
    if(status== false) {
          return;
    }
    var temp = bilder[i];
    bilder[i] = bilder[j];
    bilder[j] = temp;
    alert(bilder);
    austauschen()
}

function mischen() {
    for (i = 0; i <100; ++i) {
        [COLOR="Red"]var id = Math.floor(Math.random() * (spalte*zeile + 1));[/COLOR]
        [COLOR="Red"]verschieben(id);[/COLOR]
    }
}

function generieren() {
    bilder = [];
    var groesse = document.getElementById('groesse').value;
    spalte = parseInt([COLOR="Lime"]groesse.slice(0,1), 10[/COLOR]);
    zeile = parseInt([COLOR="Lime"]groesse.slice(2,1), 10[/COLOR]);
    document.getElementById("puzzle").innerHTML = '';
    //Erzeugen der Zeilen
    for (var k =0; k<zeile; ++k) {
        document.getElementById("puzzle").innerHTML +=  '<div id="zeile' + k + '"></div>';
    }
    //Erzeugen der [COLOR="Lime"]Spalten[/COLOR]
    for (var i = 0; i<spalte; ++i) {
        document.getElementById("zeile0").innerHTML [COLOR="Lime"]+= '<img id="bilder_' + i + '" src="blank.jpg " onclick = "verschieben([COLOR="Red"]id[/COLOR])";/>';[/COLOR]
        document.getElementById("zeile1").innerHTML [COLOR="Lime"]+= '<img id="bilder_' + (i+spalte) + '" src="blank.jpg" onclick = "verschieben([COLOR="Red"]id[/COLOR])";/>';[/COLOR]
        document.getElementById("zeile2").innerHTML [COLOR="Lime"]+=  '<img id="bilder_' + (i+2*spalte) + '" src="blank.jpg" onclick = "verschieben([COLOR="Red"]id[/COLOR])";/>';[/COLOR]
    }
   if(zeile == 4) {
       for (var i = 0; i<spalte; ++i) {
       document.getElementById("zeile3").innerHTML [COLOR="Lime"]+= '<img id="bilder_' + (i+3*spalte) + '" src="blank.jpg" onclick = "verschieben([COLOR="Red"]id[/COLOR])";/>';[/COLOR]
       }
    }
fuellenArray();
austauschen();
mischen();
 }

erstmal ein paar erklärungen zu den farblich markierten teilen:
ROT = hier liegt ein fehler vor
GRÜN = ursprüngliche fehler, hier schonmal gefixt
ORANGE = kein fehler aber unsauber, sollte man anders machen

ich fange jetzt mal von oben an:

verschieben( id )
ich vermute mal, du hast dir selber etwas ins bein geschossen. du vergibst an verschieben() den parameter "id". "id" ist eine zahl, daher findest du darin keinerlei unterstrich o. ä.. siehe auch punkt 2.
das ist der grund, wieso die function crashed, sobald die schleife mit break; beendet wird. es ist nicht das break; selbst.
vermutlich möchtest du aber das id-attribut des jeweils geklickten bildes übergeben. das funktioniert, wenn du dem onclick-eventlistener im HTML sagst:

PHP:
onclick="function(){ verschieben( this.attributes['id'].value )}"

wieso das so ist, hängt mit dem gültigkeitsbereich einer function und dem daraus resultierenden zeiger von "this" zusammen. mehr dazu findest du . es handelt sich hierbei um einen ( zugegeben ) abstrakten aber dennoch fundamentalen aspekt in javascript.

die orangenen bereiche, die ich dir markiert habe sind "bad practice". und zwar insofern, als dass javascript beim initialisieren einer function zunächst den scope bildet ( also den gültigkeitsbereich ) und dann die variablen initialisiert. ob diese dabei in einer for-schleife stecken oder nicht, ist javascript vollkommen egal. das kannst du ganz leicht einmal prüfen, indem du ( falls noch nicht geschehen ) firebug installierst ( ist ein firefox-addon ), die konsole öffnest und eine html-datei lädst, in der du folgenden code ausführst ( ohne einen anderen schnipsel am besten ):
PHP:
window.onload = function(){

function testScope( maximum ){
var maxCount = maximum;

for( var i = 0; i < maxCount; i = i+1 ){
	console.log( i );
}

for(; i > -1; i -= 1 ){
	console.log( i );
}

};

testScope( 10 );

};

würde der gültigkeitsbereich von i auf innerhalb der for-schleife begrenzt bleiben, dürfte die untere schleife nicht funktionieren. aber sie funktioniert, weil alle innerhalb einer function deklarierten variablen einen gültigkeitsbereich haben der innerhalb der function global ist, egal wo sie deklariert wurden.

mit "bad practice" meine ich, dass du eigentlich 2 variablen deklarierst, die den gleichen namen haben. das musst du nicht anders tun, es führt aber zu schönerem und leichter verständlichem code wenn du es anders machst.

mischen()
du lässt in deiner for-schleife der variablen "id" jedesmal eine zufällig generierte zahl zuweisen ( das ist kein problem ). dann übergibst du diese zahl an verschieben(). hier beginnt das eigentliche problem, denn es ist der grund, weshalb in verschieben in dem fall eine zahl ankommt statt eines strings und die function nach der schleife fehlschlägt – es wird ein string erwartet, aber eine zahl vorgefunden. für zahlen gibt es die methode "indexOf" des String-objects aber nicht.

generieren()
das setzen von innerHTML geht leichter, als du es getan hast. du brauchst dafür nicht zwingend das aktuelle HTML in einem element auslesen, erweitern und dann erst neu zuweisen ( diese reihenfolge liegt am "="-operator, der von rechts nach links arbeitet. also rein logisch anders herum, als beispielsweise in der mathematik ). das bestehende HTML zu erweitern funktioniert auch, indem du einfach "+=" schreibst.

hoffe das hilft
 
Zuletzt bearbeitet:

Greenhorn79

Nicht mehr ganz neu hier

AW: Javascript: Array Werte tauschen

Super, das hat mir enorm weitergeholfen. Mischen funktioniert nun. Zumindest meisten. Komischerweise zwar nicht wenn ich meine Eingabe in der Select-box zum Thema Feldgröße ändere. Aber ich suche nochmal, vielleicht finde ich es ja selbst. Danke für deine Tipps und Hilfe. Die ist echt super
 

Greenhorn79

Nicht mehr ganz neu hier

AW: Javascript: Array Werte tauschen

fast. Zwei hoffentlich Kleinigkeiten hätte ich aber noch. Zum Einen habe ich nun für jede Größe ein anderes Bild hinterlegt, das in die entsprechende Anzahl von Teile geschnitten ist. Die Bilder habe ich in einem separaten Ordner unter htdocs/spalte zeile/ hinterlegt, also beispielsweise 33 für 3 x 4 oder 44 für 4 x 4: Ich dachte ich gebe einfach in der Funktion austauschen den entsprechenden Pfad an. Aber irgendwie mache ich da wohl etwas falsch. Es wird zwar das richtige Bild verwendet aber dafür funktioniert anschließend das Verschieben nicht mehr. Zum Anderen versuche ich mich schon seit Tagen daran die Elemente innerhalb eines Arrays zu vergleichen. In meinem Array sind sowohl Zahlen als auch ein String. Daher dachte ich daran den Arrayinhalt mit toString in einen String umzuwandeln und dann als Vergleichsstring etwas wie 0,1,2,3,4,...,blank anzugeben. Entweder stehe ich mit JS auf Kriegsfuß oder das sind die typischen Anfängerfragen....


Code:
function austauschen() {
    var feldAnzahl = spalte*zeile;
    for(var bildNr = 0; bildNr < feldAnzahl; ++bildNr) {
      var bild = document.getElementById('bilder_' + bildNr);
     //so geht es leider nicht
     // bild.src = '/' + spalte +  zeile + '/' + bilder[bildNr] + '.jpg';

     //so funktioniert es ohne Probleme
     bild.src = bilder[bildNr] + '.jpg';
    }
}
 

mindraper

me[code].Java(Script)

AW: Javascript: Array Werte tauschen

hi.

sieht aus wie ein never-ending-project :) kein problem.

farbcodes:
GRÜN = korrekt + erklärung
ROT = naja, fast. auch erklärung.

Code:
function austauschen() {
    var feldAnzahl = spalte*zeile;
    for(var bildNr = 0; bildNr < feldAnzahl; ++bildNr) {
      [COLOR="Lime"]var bild = document.getElementById('bilder_' + bildNr);[/COLOR]
     //so geht es leider nicht
     [COLOR="Red"]// bild.src = '/' + spalte +  zeile + '/' + bilder[bildNr] + '.jpg';[/COLOR]

     //so funktioniert es ohne Probleme
     [COLOR="Lime"]bild.src = bilder[bildNr] + '.jpg';[/COLOR]
    }
}

GRÜN
js – oder auch ecma262, ecmascript262, oft auch kurz ecma - ist eine nicht streng typisierte sprache. das bedeutet, das variablen nicht vom variablen-typ her deklariert werden müssen. es langt, einfach ein var davor zu schreiben ( oder sogar das weg zu lassen, solange der code nicht im "strict mode" steht.
oft haben sog. lose typisierte sprachen den vorteil, dass für variablen, die eigentlich nicht den richtigen typ für eine operation aufweisen, kein sog. "typecast" ausgeführt werden muss. ein gutes beispiel wäre die verknüpfung von integern und floats ( also ganzzahlen und kommazahlen ). in javascript kannst du einfach so etwas schreiben:

PHP:
var x = 10;

// jetzt passiert ganz viel anderer kram...

x += 0.5;

x hat jetzt den wert 10.5, also ist es ein float ( kommazahl ). ursprünglich wurde x aber als integer ( ganzzahl ) initialisiert. das bedeutet, der javascript-interpreter, hat einen automatischen typecast vorgenommen, sobald auf eine integerzahl ein floatwert hinzugerechnet wurde.

dieses typecasting funktioniert auch mit strings. daher kannst du ja schreiben

PHP:
document.getElementById( 'bild_' + bildNr )

getElementById() erwartet als parameter einen string, du übergibst aber einen string + einen integer und der interpreter wandelt alles in einen string um ( ein string ist der "höchste" typus, den eine variable haben kann, deshalb ).
das passiert in den teilen deines codes, der grün markiert ist. jetzt zu

ROT
um zu verdeutlichen, was in dieser zeile passiert, hier die schematische darstellung:

objecteigenschaft = string + integer + integer + string + integer + string;

in dem part, in dem integer + integer übergeben wird, denk der javascript-interpreter warscheinlich ungefähr folgendes:

"vorsicht, hier muss ich einen typecast vornehmen, bei dem integers in höherwertige strings eingebunden werden. also rechne ich erst die integer zusammen, wo das möglich ist und mache dann den typecast."

soll heißen: dein string lautet am ende nicht so:
bild.src = "/44/4.jpg"

sondern:
"bild.src = /8/4.jpg"

wieso ist klar, oder? die zwei vierer werden zusammengerechnet und dann erst der string gebildet.

kommen wir zum kern der sache, der

LÖSUNG
es ist so simpel, dass man es eigentlich kaum glauben kann. anstatt
'/' + zeile + spalte + '/'

zu schreiben, schreib einfach:
( '/' + zeile ) + ( spalte + '/' )

die klammern verhalten sich so, wie klammern in der mathematik. es werden also erst die typecasts ausgeführt und dann die strings verbunden.

gruß
 

Greenhorn79

Nicht mehr ganz neu hier

AW: Javascript: Array Werte tauschen

Hallo mindraper,

das mit dem never-ending-project ist aber echt eine Drohung. ;-) Ich hoffe nicht, dass es so ist.
Also ich habe den von dir vorgeschlagenen Weg getestet, leider ohne Erfolg. Sowohl bei deiner Pfadangabe als auch bei meiner erhalte ich . Das passt ja eigentlich auch. Nur beim verschieben kommt er dann an die Grenzen. Das klappt dann leider nicht mehr, warum auch immer. Der Austausch der Bilder funktioniert.

Ich hänge mal noch meine austauschen und meine verschiebe-Funktion an:

Liebe Grüße und tausend Dank für deine Geduld. :danke:

Code:
function austauschen() {
    var feldAnzahl = spalte*zeile;
    for(var bildNr = 0; bildNr < feldAnzahl; ++bildNr) {
      var bild = document.getElementById('bilder_' + bildNr);
      bild.src = bilder[bildNr] + '.jpg';
    }
}

function verschieben(id) {
    for(var bildNr = 0; bildNr < bilder.length; ++bildNr) {
        if(bilder[bildNr] == 'blank') {
            //Bildnummer der Lücke
            i = bildNr;
            break;
        }
    }
    var trennPos = id.indexOf("_");
    var j = id.substring(trennPos + 1);
    var status = pruefen(i,j);
    if(status== false) {
          return;
    }
    var temp = bilder[i];
    bilder[i] = bilder[j];
    bilder[j] = temp;
    austauschen();
    gewonnen();
}
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Statistik des Forums

Themen
118.565
Beiträge
1.538.067
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben