Here is my current code:
const diceRoll = Math.trunc(Math.random() * 6) 1;
const diceRollArr = Array.from ({length: 4}, (_, i) => diceRoll[i]);
console.log(diceRollArr); //Returns: (4)[undefined, undefined, undefined, undefined]
Can't wrap my head around what I'm missing. If I do:
const diceRoll = Math.trunc(Math.random() * 6) 1;
const diceRollArr = Array.from ({length: 4}, (_, i) => diceRoll);
It will generate the same dice roll for the given array length, so I need a way to do a dice roll for each index position. Any help would be greatly appreciated, thanks!
CodePudding user response:
Try converting diceRoll
to a function, and use it for mapping the elements of an Array:
const diceRoll = _ => Math.trunc(Math.random() * 6) 1;
const diceRollArr = [...Array(4)].map(diceRoll);
console.log(`[${diceRollArr}]`);
CodePudding user response:
You are accessing diceRoll
as an array when it's a variable. Also you need diceRoll
to be a function and call it at every iteration
const diceRoll = () => Math.trunc(Math.random() * 6) 1;
const diceRollArr = Array.from ({length: 4}, diceRoll);
console.log(diceRollArr);
CodePudding user response:
You can use my favourite [...Array(x)].map(() => ...)
to loop x times, then inside the loop generate a random number with Math.random
const numberOfRolls = 10
const rolls = [...Array(numberOfRolls)].map(() => (~~(Math.random() * 6) 1))
console.log(rolls)
CodePudding user response:
I recently made a die roll class. For some reason, I suspect that you're a tabletop roleplaying gamer, so this will be somewhat suited for you.
Just create a new DicePool class, and generate new rolls by calling the roll()
method.
function randomize(max, min = 1) {
return Math.floor(Math.random() * max) min;
}
class DicePool {
constructor(combinationStr) {
let [amount, type, modification] = this.#breakdown(combinationStr);
this.amount = amount;
this.type = type;
this.modification = modification;
}
roll() {
let result = 0;
for (var i = 0; i < this.amount; i ) {
result = randomize(this.type);
}
result = this.modification;
return result;
}
#breakdown(combinationStr) {
let [diceStr, modification] = this.#stripModification(combinationStr);
let [amount, type] = diceStr.split('d');
return [amount, type, modification];
}
#stripModification(str) {
if (str.indexOf('-') != -1) {
let aritmic = 1;
let breakArr = str.split('-');
breakArr[aritmic] *= -1
return breakArr;
} else if (str.indexOf(' ') != -1) {
return str.split(' ');
}
return [str, 0];
}
}
const d6 = new DicePool('1d6');
const diceRollArr = Array.from ({length: 4}, () => d6.roll());
console.log(diceRollArr)