2017-10-31 3 views
3

Ich verwende Javascript, um das Hintergrundbild eines Elements aus einer Klasse zu setzen. Der Code funktioniert größtenteils, aber ich erhalte eine undefinierte Variable, wenn ich den Code ausführe. Ich verwende Math.Random(), um die Zahlen für die Variablen zu erhalten. Das Problem Punkt in meinem Code (oder zumindest ich denke, es ist):JavaScript: Warum bekomme ich einen undefinierten Wert bei der Verwendung von Zufallszahlen aus einem Array?

var RandomContentDiv = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 
var cd = RandomContentDiv[Math.round(Math.random()*RandomContentDiv.length-1)]; 
console.log(cd); 

ich console.log(cd); setzen, um zu sehen, welche Zahlen ausgegeben werden. Ich bekomme Ergebnisse, aber die Ergebnisse sind nicht hilfreich bei der Lösung des Problems. Ich werde den Code 2 Mal testen, um Ihnen zu zeigen, was ich normalerweise bekommen würde.

Test 1:

Number: 5 
Number: 13 
Number: 10 
Number: 1 
Number: 10 
Number: 6 
Number: 10 
Number: 3 
Number: 2 
Number: 15 
Number: 2 
Number: 3 
Number: 8 
Number: 15 
Number: 12 
Number: 7 
Number: 9 
Number: 2 
Number: 0 
Number: 8 
Number: 10 
Number: 3 
Number: 14 
Number: 13 
Number: 9 
Number: 1 
Number: 15 
Number: 13 
Number: 3 
Number: 2 
Number: 4 
Number: 14 
Number: 11 
Number: 0 
Number: 15 
Number: 7 
Number: 6 
Number: 1 
Number: 4 
Number: 7 
Number: 8 
Number: 6 
Number: 7 
Number: 4 
Number: 10 
Number: 0 
Number: 12 
Number: 11 
Number: 2 
Number: 7 
Number: 2 
Number: 11 
Number: 13 
Number: 6 
Number: 0 
Number: 5 
Number: 1 
Number: 2 
Number: 7 
Number: 8 
Number: 2 
Number: 13 
Number: 4 
Number: 3 
Number: 7 
Number: 15 
Number: 5 
Number: 1 
Number: 0 
Number: 2 
Number: 11 
Number: 8 
Number: 10 
Number: 12 
Number: 11 
Number: 1 
Number: 12 
Number: 11 
Number: 12 
Number: 0 
Number: 6 
Number: 8 
Number: 1 
Number: 11 
Number: 1 
Number: 12 
Number: undefined 

Test 2:

Number: 13 
Number: 2 
Number: 9 
Number: 0 
Number: 2 
Number: 0 
Number: 11 
Number: 3 
Number: 5 
Number: 3 
Number: 11 
Number: 3 
Number: 14 
Number: 15 
Number: 9 
Number: 8 
Number: 11 
Number: 12 
Number: 10 
Number: 3 
Number: 9 
Number: 0 
Number: undefined 

denke ich, das Problem aus dieser Aussage kommt: RandomContentDiv[Math.round(Math.random()*RandomContentDiv.length-1)];, aber ich weiß nicht, wie es zu beheben weil ich nicht tief genug in Math für JavaScript getaucht habe. Alles, was ich weiß, ist, dass jemand etwas über Math.Round gesagt hat, was Ihnen eine ungenaue Zahl gibt, wenn Sie gerundet sind (d. H. 1,5 könnte auf 1 runden), aber ich denke nicht, dass es sich darauf bezieht. Kann mir jemand sagen, ob es die Aussage ist, die das Problem oder etwas anderes verursacht?

+0

Fragen hier sollten nicht "ALL" Ihren Code enthalten. Sie sollten Ihren Code auf das kürzeste Beispiel reduzieren, das Ihr Problem reproduziert. Das heißt, Math.random() * length - 1 ist falsch. Ihre Reihenfolge der Operationen ist falsch, weil '*' Vorrang vor '-' hat. Korrigiere es, indem du Klammern hinzufügst, so dass das '-' vor dem' * 'steht. – meagar

+0

@meagar es ist "Hier ist alles von meinem Javascript-Code", und ich werde versuchen, Ihre Lösung, –

+0

Ich weiß, und ich sage Ihnen, dass einschließlich ** all ** Ihre Javascript-Code macht diese Frage off Topic. Ihr Problem könnte in einer einzigen dreizeiligen Schleife reproduziert werden, und diese Schleife sollte enthalten sein. Nichts mehr. – meagar

Antwort

1

So berechnen Sie den Index zum Array RandomContentDiv.

Ihr Code hat dies in dem Sie die Nummer erhalten, dass undefined herauskommt in der Konsole ...

cd = RandomContentDiv[Math.round(Math.random()*RandomContentDiv.length-1)];

Manchmal Math.random() geben Sie eine sehr kleine Zahl nahe Null und das führt dazu, dass Sie versuchen, auf RandomContentDiv [-1] zuzugreifen, was undefiniert ist.

Sehen Sie sich die Beispiel-Funktion getRandomInt unter https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random an. Es ist ein Beispiel dafür, wie Sie eine ganze Zahl zwischen 0 und RandomContentDiv.length-1 zufällig auswählen sollten.

+0

Das ist, was ich angenommen habe, das Problem zu sein; Ich habe jedoch versucht, das Negativ herauszunehmen, und es ist immer noch passiert. Weißt du, wie ich das ändern kann, um meinen Code genauer zu machen? –

+0

Siehe das Beispiel, auf das ich verwiesen habe. Es zeigt, wie man eine Zahl von Null bis N-1 erzeugt, was du willst. –

+0

Jemand hat vorgeschlagen, dass das Problem meine Klammern sind, also habe ich es in 'cd = RandomContentDiv [Math.round (Math.random() * (RandomContentDiv.length-1))] geändert;', und es hat funktioniert. Setzen Sie das in Ihre Antwort und ich werde es akzeptieren. –

Verwandte Themen