2016-07-13 3 views
0

Ich habe das Array mit Symbolen AE Ich brauche jedes Symbol in ng-repeat auszugeben, aber Array in zufälliger Reihenfolge und jedes Symbol soll n mal angezeigt werden soll (beispielsweise 4-fach)Angular: Wie erhalten Sie jedes Symbol aus dem Array n-mal in zufälliger Reihenfolge?

+0

Bitte geben Sie einige Code zu zeigen, was Sie‘ Ich habe es bisher versucht. – lintmouse

+0

$ scope.symbols = [a, b, c, d, e]; Ich muss dieses Array zum Beispiel so ausgeben [a, b, c, d, b, e, c, d, e, a, a, b, c, d, b, e, c, d, e, a] Jedes Symbol muss 4 Mal angezeigt werden und alle Symbole müssen zufällig angezeigt werden. – MikeDiam

+0

Wählen Sie nach dem Zufallsprinzip den nächsten Index, um ihn zu spleißen. –

Antwort

1

Sie können die Array.prototype.sort() Methode zu shuffle Ihr Array verwenden.

Ich habe eine Funktion, die Ihnen die anfängliche Array als Parameter übergeben können und die Zeiten, dass Sie es sortieren wollen, wie unten:

(function() { 
 
    "use strict"; 
 
    angular.module('app', []) 
 
    .controller('mainCtrl', function($scope) { 
 
     function randomize(array, times) { 
 
     var temp = []; 
 
     for (var i = 0; i < times; i++) { 
 
      array.sort(function() { 
 
      return .5 - Math.random(); 
 
      }); 
 
      temp = temp.concat(array); 
 
     } 
 
     return temp; 
 
     } 
 

 
     $scope.symbols = randomize(['a', 'b', 'c', 'd', 'e'], 4); 
 
    }); 
 
})();
<!DOCTYPE html> 
 
<html ng-app="app"> 
 

 
<head> 
 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.7/angular.min.js"></script> 
 
</head> 
 

 
<body ng-controller="mainCtrl"> 
 
    Words: 
 
    <div ng-repeat="symbol in symbols track by $index" ng-bind="symbol"> 
 
    </div> 
 
</body> 
 

 
</html>

0

Wahrscheinlich ll Notwendigkeit zwei Funktionen, eine zum Mischen der Symbole und andere, um ein Array 'N' mal mit Mischen zu setzen.

es ein:

var num = 5; // 'N' time shuffling. 

function setArray() { 
    for(var i = 0; i < num; i++) { 
    $scope.symbols = $scope.symbols.concat(shuffle()); 
    } 
} 

setArray(); 

hier shuffle() eine andere Funktion ist eine zufällige Reihenfolge der Symbole auszuwählen.

Siehe DEMO hier.

0

OK, da die anderen Vorschläge nur so kompliziert waren, werde ich aus meinem Kommentar ausbauen.

var result = []; 
for (var i=0; i<4; i++) { 
    for (var j=0; j<yourArray.length; j++) { 
     var newIndex = Math.floor(Math.random() * result.length); 
     result[newIndex] = yourArray[i]; 
    } 
} 

Sie könnten wahrscheinlich sogar einen Filter daraus machen.

Verwandte Themen