2016-07-17 13 views
0

Ich habe eine for-Schleife, um eine zufällige Anzahl von einzigartigen Elementen aus einem großen Array in ein anderes kleines Array zu schieben. Ich möchte die genaue Anzahl der Elemente in dieses kleine Array schieben.Javascript for Schleife für exakte Iterationen

$scope.word_pair = [ 
    {'word':'Carla', 'pair':'Lion'}, 
    {'word':'Sophie', 'pair':'Lotta'}, 
    {'word':'Jannes', 'pair':'Stubbi'}, 
    {'word':'Martin', 'pair':'Wolle'}, 
    {'word':'Flo', 'pair':'Ign'}, 
    {'word':'Rere', 'pair':'Rose'}, 
    {'word':'Jean', 'pair':'Tamara'}, 
    {'word':'Memo', 'pair':'Elk'}, 
    {'word':'Nila', 'pair':'Naph'} 
]; 

/* To select limited random items to display */ 
var displayCount = 3 //count should change at each level 
$scope.randomWord_pair = [] 
var numbers = []; 
for (var i = 0; i <= displayCount; i++) { 
    var randomNumber = Math.floor(Math.random() * 4); 
    if (numbers.indexOf(randomNumber) == -1) { 
     numbers.push(randomNumber); 
     $scope.randomWord_pair.push($scope.word_pair[randomNumber]) 
    } 
} 

Hier displayCount entscheidet, wie viele (exakt) Anzahl der Elemente, die ich in meinem randomWord_pair Array wollen. Aber manchmal gibt es mir andere als 3 Elemente in randomWord_pair Array.

Wie kann ich es beheben?

+1

* „Code-Snippet wird mit dem Vorschlag, in Antwort aktualisiert“ * Nein, das ist nicht, wie SO funktioniert. Sie falten Antworten nicht in die Frage, es lässt die Antworten wie Unsinn aussehen. –

Antwort

3

Es gibt zwei Gründe dafür:

  1. Sie sind zu viel Looping. i = 0; i <= displayCount; i++ geben Ihnen vier Iterationen für displayCount = 3, nicht drei: i 0 sein wird, dann 1, dann 2, dann 3

  2. Du Looping nicht genug. :-) Sie schieben nur eine Zahl, wenn Sie sie nicht finden, dh Sie drücken nicht immer eine Zahl für eine Schleifeniteration. verwenden

Gerade

while ($scope.randomWord_pair.length < displayCount) 

Sie in einem Kommentar gesagt haben, dass der Code auch einige Wortpaare verpassten ist, und Sie haben den Code für $scope.word_pairs hinzugefügt.

$scope.word_pairs hat neun Einträge (Indizes 0 bis einschließlich 8), aber Ihr Zufallszahlencode:

var randomNumber = Math.floor(Math.random() * 4); 

... wird immer nur Ihnen Werte gibt von 0 bis 3 (einschließlich). Wenn Sie alle neun möglichen Indizes in word_pairs wollen, möchten Sie:

var randomNumber = Math.floor(Math.random() * $scope.word_pairs.length); 
// -------------------------------------------^^^^^^^^^^^^^^^^^^^^^^^^ 
+0

Hier ist jedoch ein Problem: while ($ scope.randomWord_pair.length Nitish

+0

hat @Nitish: Nein, tut es nicht. Es wird so lange wiederholt, bis Sie drei Elemente auf das Array geschoben haben. Nichts zufälliges dort überhaupt. –

+0

Lass mich neu formulieren, was ich sagen will !: Momentan bekomme ich 3 Elemente zufällig aus den ersten vier Elementen von $ scope.word_pair, es werden nicht alle 9 Elemente berücksichtigt, also erscheint Ign, Ros, Tamara nie! Ich habe das Code-Snippet in der Frage aktualisiert. – Nitish

Verwandte Themen