您如何不从math.floor获得重复数字?

时间:2018-06-25 09:37:59

标签: javascript jquery arrays random

我的目标是使这些宝石的取值范围从1-10开始

如果您仍然可以在使用mathfloor的同时为我提供帮助,我也将不胜感激

//Variables
var emGem = 0;
var ruGem = 0;
var diGem = 0;
var saGem = 0;
var possibleGem = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

//Initiate scores
emGem = possibleGem[Math.floor(Math.random() * possibleGem.length)];
ruGem = possibleGem[Math.floor(Math.random() * possibleGem.length)];
diGem = possibleGem[Math.floor(Math.random() * possibleGem.length)];
saGem = possibleGem[Math.floor(Math.random() * possibleGem.length)];

//Debug
console.log(emGem);
console.log(ruGem);
console.log(diGem);
console.log(saGem);
console.log(randomNumber);

3 个答案:

答案 0 :(得分:2)

您需要找出一种方法来选择元素而不进行替换。您可以选择一个随机索引,然后splice在该索引处的元素来获取该元素,同时将其从数组中删除:

var possibleGem = [1,2,3,4,5,6,7,8,9,10];

const randItem = () => {
  const randIndex = Math.floor(Math.random() * possibleGem.length);
  return possibleGem.splice(randIndex, 1)[0];
};

const emGem = randItem();
const ruGem = randItem();
const diGem = randItem();
const saGem = randItem();

//Debug
console.log(emGem);
console.log(ruGem);
console.log(diGem);
console.log(saGem);

答案 1 :(得分:1)

谢谢大家!我用您所有的答案来思考如何自己写这篇文章,因为你们正在使用我还没有学过的东西,但是我一定会检查出来的!如果您对我决定如何进行感兴趣,那就是。

while (true) {
emGem = possibleGem[Math.floor(Math.random() * possibleGem.length)];
ruGem = possibleGem[Math.floor(Math.random() * possibleGem.length)];
diGem = possibleGem[Math.floor(Math.random() * possibleGem.length)];
saGem = possibleGem[Math.floor(Math.random() * possibleGem.length)];
if  (emGem !== ruGem && emGem !== diGem && emGem !== saGem &&  ruGem !== diGem && ruGem !== saGem && diGem !== saGem) {
    break;
}}

答案 2 :(得分:0)

我将制造一系列可能的宝石,然后将其洗牌。每当我需要一个值时,我都会将其从数组中弹出。

shuffleArray()代码来自How to randomize (shuffle) a JavaScript array?

//Variables
var emGem = 0;
var ruGem = 0;
var diGem = 0;
var saGem = 0;
var possibleGem = [1,2,3,4,5,6,7,8,9,10];
shuffleArray(possibleGem);

//Initiate scores
emGem = possibleGem.pop();
ruGem = possibleGem.pop();
diGem = possibleGem.pop();
saGem = possibleGem.pop();

//Debug
console.log(emGem);
console.log(ruGem);
console.log(diGem);
console.log(saGem);

function shuffleArray(array) {
    for (let i = array.length - 1; i > 0; i--) {
        const j = Math.floor(Math.random() * (i + 1));
        [array[i], array[j]] = [array[j], array[i]]; // eslint-disable-line no-param-reassign
    }
}