-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsimpleRandomSelector.js
75 lines (68 loc) · 1.98 KB
/
simpleRandomSelector.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
'use strict'
const RandomSelector = require('./randomSelector');
const DEBUG_RANDOM_SELECTOR = true;
/**
* Random selector: Store objects and select objects randomly
* @constructor
* @param Arrays Targets
* @param Number MaxRate Selector will random from 0 to MaxRate to select object
*/
class SimpleRandomSelector extends RandomSelector {
constructor(Randomer) {
super(Randomer)
this.hasReplacement = true;
}
setRelacementMode(hasReplacement) {
this.hasReplacement = hasReplacement;
}
setElements(elements)
{
if(elements === undefined)
{
throw new Error('Error: invalid elements (undefined)!!!');
}
else if(elements === null)
{
throw new Error("Error: invalid elements (null)!!!");
}
else if(!Array.isArray(elements))
{
throw new Error("Error: invalid elements (not an array)!!!");
}
else{
this.elements = elements;
}
this.debug('setElements: ', this.elements);
}
hasRelacementMode() {
return this.hasReplacement;
}
select() {
if (this.hasReplacement) {
return this.selectWithReplacement();
} else {
return this.selectWithoutReplacement();
}
}
selectWithReplacement() {
var index = this.randomer.getRandomIntBetween(0, this.elements.length);
this.debug("selectWithReplacement", index, this.elements.length);
return this.elements[index];
}
selectWithoutReplacement() {
var returnElement = null;
var removeIndex = -1;
if (this.elements.length > 0) {
removeIndex = this.randomer.getRandomIntBetween(0, this.elements.length);
returnElement = this.elements.splice(removeIndex, 1)[0];
}
this.debug("selectWithoutReplacement", removeIndex, returnElement, this.elements.length);
return returnElement;
}
debug (){
if(this.DEBUG){
console.log("[DEBUG]SimpleRandomSelector: ", arguments);
}
}
};
module.exports = SimpleRandomSelector;