Angular:如何以随机顺序从数组中获取每个符号n次?

时间:2016-07-13 16:24:24

标签: arrays angularjs

我有符号A-E的数组 我需要在ng-repeat中输出每个符号,但是数组应该是随机顺序,每个符号应该显示n次(例如4次)

3 个答案:

答案 0 :(得分:1)

您可以使用Array.prototype.sort()方法随机播放您的阵列。

我创建了一个函数,您可以将初始数组和要排序的时间作为参数传递,如下所示:



(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);
    });
})();
&#13;
<!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>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

你可能需要两个函数,一个用于混洗符号,另一个用于设置一个数组'N'次,用于改组。

设置它:

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

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

setArray();

此处shuffle()是另一个选择符号随机顺序的函数。

请在此处查看DEMO

答案 2 :(得分:0)

好的,既然其他建议太复杂了,我会从我的评论中构建出来。

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];
    }
}

你甚至可以从中做出过滤。