shuffle

Jofre

Erfahrenes Mitglied
Javascript:
function erstellKombination()
{
var buch1 =[ "a","b","c","d","e","f","g","h","i","j"];
var buch2 =[ "H","I","j","k","l","m","n","o","p","q"];
var zahl = [0,1,2,3,4,5,6,7,8,9];
    var zw1=shuffleArray(buch1);
    var zw2=shuffleArray(zahl);;
    var zw3=shuffleArray(buch2);   
    for (let i =0 ; i < 9;i++){
        gesuchtBasis[i]= zw1[i] + zw2[i] + zw3[i];
    }
    gesuchtNeu= shuffleArray(gesuchtBasis);
   
    console.log("gesuchtBasis  in erstellkombination " +gesuchtBasis);
    console.log("gesucht neu " +gesuchtNeu);
}

warum ist gesuchtBasis identisch mit gesuchtNeu?
Shuffle aus dem Netz
Javascript:
function shuffleArray(array) {
    for (var i = array.length - 1; i > 0; i--) {
        var j = Math.floor(Math.random() * (i + 1));
        var temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }
    return array;
}
 
Zuletzt bearbeitet von einem Moderator:
Durchgemischt bekommst Du es schon bei dem Code, den Du hast, nur dass die originale Version verloren geht. Wenn Du diese behalten möchtest, musst Du das Array klonen, so wie es in dem Link in #6 beschrieben wird.
 
Lösungsidee?

Ich nehme in diesem Beispiel zahl erneut . Shuffle zahl erneut und weise über eine for Schleife
gesuchtNeu =gesuchtBasis[zw2];

habe mit .... versucht zu arbeiten.

ist das ok?
 
Dieses funktioniert bei mir:
Code:
        function erstellKombination() {
            var buch1 = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"];
            var buch2 = ["H", "I", "j", "k", "l", "m", "n", "o", "p", "q"];
            var zahl = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
            function shuffleArray(array) {
                for (var i = array.length - 1; i > 0; i--) {
                    var j = Math.floor(Math.random() * (i + 1));
                    var temp = array[i];
                    array[i] = array[j];
                    array[j] = temp;
                }
            }
            function cloneArray(arr) {
                let newArray = [];
                for (let i = 0; i < arr.length; i++) {
                    newArray[i] = arr[i];
                }
                return newArray;
            }

            var zw1 = cloneArray(buch1);
            shuffleArray(zw1);
            var zw2 = cloneArray(buch2);
            shuffleArray(zw2);
            var zw3 = cloneArray(zahl);
            shuffleArray(zw3);
            console.log("buch1 durchgemischt:" + zw1);
            console.log("buch2 durchgemischt:" + zw2);
            console.log("zahl durchgemischt:" + zw3);

            var gesuchtBasis = [];
            for (let i = 0; i < 10; i++) {
                gesuchtBasis[i] = zw1[i] + zw2[i] + zw3[i];
            }
            gesuchtNeu = cloneArray(gesuchtBasis);
            shuffleArray(gesuchtNeu);

            console.log("gesuchtBasis  in erstellkombination " + gesuchtBasis);
            console.log("gesucht neu " + gesuchtNeu);
        }
        erstellKombination();
Man hätte es noch etwas eleganter machen können, indem man die shuffle-Funktion als Prototyp für Array definieren würde. Oder man hätte das Klonen in die shuffle-Funktion übernehmen können.
 
Man hätte es noch etwas eleganter machen können, indem man die shuffle-Funktion als Prototyp für Array definieren würde.
Das Verändern eines built-in Prototypes war noch nie eine gute Idee.
Siehe auch Why is extending native objects a bad practice?.

(Wenn meine ständigen offtopic Verbesserungsvorschläge zu viel werden, sagt es ruhig ;) Ich mache es nur in der Hoffnung auf besseren Code auf dieser Erde :coffee:)
 
Zurück