我有符号A-E的数组 我需要在ng-repeat中输出每个符号,但是数组应该是随机顺序,每个符号应该显示n次(例如4次)
答案 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;
答案 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];
}
}
你甚至可以从中做出过滤。