• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Überprüfen ob Array Wert enthält

Status
Für weitere Antworten geschlossen.

Imbericle

Blogger
Hab Google getätigt aber nix passendes rausgefunden.

Ich will prüfen ob ein Array einen Speziellen String enthält egal an welcher stelle und zwar ohne zu prüfen
Code:
if (!array[0]="Spezieller String")
{
     if (!array[1]="Spezieller String")
     {
          etc bis zu 500 hoch und dann mit 1000den else schleifen
     }
}

oder ähnlichem Gefranse....

Nein ich will das nicht mit php machen, da dass Teil sowieso nur zusatzt auf der Seite ist, und man nicht merkt, wenn man die Seite nicht kennt das es fehlt wenn man js abgestellt hat^^

MfG
 
Werbung:
Man bin ich doof, das hätt ich mir denken können.
2. Frage, weils grad so schön ist:

Gibt es eine Möglichkeit, zahlen quasie durchzumischen, sodass jede einmal vorkommt aber nicht mehr in der reihenfolge 0-6, sondern 4,3,1,5,6,0,2 (oder andere varianten)

ohne Math.random()*6+0, jedes mal abzuspeichern welche zahl schon vorkam, Math.random() nochmal durchgehen und wenn die zahl rauskommt schon vorkam, nochmal durchzugehen, bis alle einmal dran war.

MfG
 
Werbung:
Werbung:
Beide Arten ein Array zu sortieren sind nicht optimal, wobei die mit sort auf meinem Rechner länger zur Berechnung benötigt hat und auch noch schlechtere Ergebnisse geliefert hat.

Code:
// Bei arrayShuffle von brain4

        -> Häufigkeit der Zahl x an der Stelle
        0       1       2       3       4       5

Z 0   166476, 206059, 182607, 163616, 147065, 134177
a 1   167035, 151913, 196284, 176568, 160814, 147386
h 2   166572, 154798, 145186, 192672, 176998, 163774
l 3   166727, 158917, 150869, 145383, 195725, 182379
  4   166954, 161754, 158439, 154582, 152647, 205624
x 5   166236, 166559, 166615, 167179, 166751, 166660



// Bei arr.sort

        -> Häufigkeit der Zahl x an der Stelle
        0       1       2        3       4       5

Z 0   246048, 246215, 163765,  94016,  124651, 125305
a 1   246001, 246352, 164404,  93716,  125176, 124351
h 2   204722, 205761, 230135, 171917,   93786,  93679
l 3   169225, 168226, 216671, 320202,   62829,  62847
  4    83302,  82893, 122789, 117504,  296548, 296964
x 5    50702,  50553, 102236, 202645,  297010, 296854

Diese Statistiken wurden mit folgendem Script erstellt:
Code:
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
<head>
<title>test</title>
<style type="text/css">

</style>
<script type="text/javascript" src="mathLib.js"></script>
<script type="text/javascript">
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;

var stat = [[0, 0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0, 0]];

for(var i = 0 ; i < 1000000 ; i++){
    var arr = [0, 1, 2, 3, 4, 5];
    arr.shuffle();
    //arr.sort(function(){ return Math.round(Math.random()) - 0.5; });
    stat[0][arr[0]]++;
    stat[1][arr[1]]++;
    stat[2][arr[2]]++;
    stat[3][arr[3]]++;
    stat[4][arr[4]]++;
    stat[5][arr[5]]++;
}
alert(stat.join("\n"));
</script>
</head>
<body>
</body>
</html>

[d.h. es wurden 6 Zahlen genommen und zufällig gemischt, anschließend die Position der 0, 1,... 6 protokolliert]


Im Idealfall wären alle Werte um die 166.666 herum, in beiden Fällen sind deutliche Ausnahmen zu entdecken.
 
Kürzer ist halt nicht immer schneller oder besser. Die Methode mit sort() ist nicht so zufällig, weil das random hier nur drei Werte liefert, welche nur die Position zum vorher gehenden Index bestimmt. Es wird also nur zwischen zwei Werten entschieden.

Das mit der Geschwindigkeit mag ich nicht so recht glauben.
Code:
var arrSort = function(){ return Math.round(Math.random()) - 0.5; };
for (...) {
    ...

    arr.sort(arrSort);

    ...
}
Ist das schneller? Mal in V9 getestet?
 
Die Funktion mit dem random() ist wirklich langsamer. Im aktuellen Fx 5 mal langsamer.

Ich benutze diese Funktion zum mischen eines Arrays:
Code:
Array.prototype.shuffle = function() {
    var i = this.length;
    if(i < 2) return false;
    do{
        var zi = Math.floor(Math.random() * i);
        var t = this[zi];
        this[zi] = this[--i];
        this[i] = t;
    }while(i)
    return true;
}
 
Werbung:
Die Funktion von struppi liefert tatsächlich sehr gute Ergebnisse:

Code:
167050, 166489, 166217, 166982, 166922, 166340
166868, 167098, 166861, 166841, 166146, 166186
165871, 167462, 167277, 166475, 166423, 166492
166180, 166599, 166405, 166439, 167301, 167076
167561, 166088, 166077, 166674, 166438, 167162
166470, 166264, 167163, 166589, 166770, 166744
 
Werbung:
autsch, habe nur den anfänglichen code gesehen, der läuft auch in php, sorry....
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben