1. Начнем с того, что while - это плохой знак. desk во внутренней функции тоже плохо, лучше использовать this
Отрефакторим -
var deck = {
allCards: ["ch-6", "ch-7", "ch-8", "ch-9", "ch-10", "ch-v", "ch-d", "ch-k", "ch-t", "bu-6", "bu-7", "bu-8"],
randomCards: [],
randomizer: function(min, max) {
for(var i = 0; i < this.allCards.length; i++) {
var rand = Math.round(Math.random() * (max - min - 1));
this.randomCards.push(this.allCards[rand]);
this.allCards.splice(rand, 1);
}
}
};
deck.randomizer(0, deck.allCards.length);
2. Потом мелкая ошибка в радоме - забыли прибавить min
var deck = {
allCards: ["ch-6", "ch-7", "ch-8", "ch-9", "ch-10", "ch-v", "ch-d", "ch-k", "ch-t", "bu-6", "bu-7", "bu-8"],
randomCards: [],
randomizer: function(min, max) {
for(var i = 0; i < this.allCards.length; i++) {
var rand = min + Math.round(Math.random() * (max - min - 1));
this.randomCards.push(this.allCards[rand]);
this.allCards.splice(rand, 1);
}
}
};
deck.randomizer(0, deck.allCards.length);
3. И, наконец, ошибка логики - мы splic'им массив, значит длинна его тоже уменьшается... но рандом остается тем же - от 0 до
предыдущей длины. Придется убрать min и max - с такой логикой их добавить невозможно - они будут вызывать проблемы.
var deck = {
allCards: ["ch-6", "ch-7", "ch-8", "ch-9", "ch-10", "ch-v", "ch-d", "ch-k", "ch-t", "bu-6", "bu-7", "bu-8"],
randomCards: [],
randomizer: function(min, max) {
for(var i = 0; i < this.allCards.length; i++) {
var rand = Math.round(Math.random() * (this.allCards.length - 1));
this.randomCards.push(this.allCards[rand]);
this.allCards.splice(rand, 1);
}
}
};
deck.randomizer();
4. И, наконец, правильная логика:
var deck = {
allCards: ["ch-6", "ch-7", "ch-8", "ch-9", "ch-10", "ch-v", "ch-d", "ch-k", "ch-t", "bu-6", "bu-7", "bu-8"],
randomCards: [],
randomizer: function(min, max) {
for(var i = 0; i < this.allCards.length; i++) {
var rand = min + Math.round(Math.random() * ((max > this.allCards.length ? this.allCards.length : max) - min - 1));
this.randomCards.push(this.allCards[rand]);
this.allCards.splice(rand, 1);
}
}
};
deck.randomizer(0, deck.allCards.length);