Return JS数组中的N个唯一随机数
Return N unique random numbers in JS array
我打算在 JS 上做 Google Mineshweeper 这样的小游戏。我需要编写函数,获取数组中 N 和 returns N 个唯一随机数的数量。用重复做数组很容易,但我不明白,没有它如何创建数组。
我使用此代码来初始化游戏字段:
const game = {
init: function(fieldWidth, fieldHeight, fieldBombs) {
let field = [];
let bombsPos = [];
for (let i = 0; i < fieldWidth * fieldHeight; i++) {
field[i] = {
isBomb: false,
nearbyBombs: 0,
}
}
for (let i = 0; i < fieldBombs; i++) {
// It's possible to repeat numbers!!!
bombsPos[i] = Math.floor(Math.random() * (fieldWidth * fieldHeight));
field[bombsPos[i]].isBomb = true;
}
return field;
},
reset: function() {
// Other code
},
}
console.log(game.init(2, 2, 2));
那么,你能帮我解决这个问题吗?提前致谢。
改为使用 while
循环,而 bombsPos
数组长度小于 fieldBombs
数字:
while (bombsPos.length < fieldBombs) {
const index = Math.floor(Math.random() * (fieldWidth * fieldHeight));
if (!field[index].isBomb) {
field[index].isBomb = true;
bombsPos.push(index);
}
}
const game = {
init: function(fieldWidth, fieldHeight, fieldBombs) {
let field = [];
let bombsPos = [];
for (let i = 0; i < fieldWidth * fieldHeight; i++) {
field[i] = {
isBomb: false,
nearbyBombs: 0,
}
}
while (bombsPos.length < fieldBombs) {
const index = Math.floor(Math.random() * (fieldWidth * fieldHeight));
if (!field[index].isBomb) {
field[index].isBomb = true;
bombsPos.push(index);
}
}
return field;
},
reset: function() {
// Other code
},
}
console.log(game.init(2, 2, 2));
但您似乎没有使用 bombsPos
数组。这是故意的,还是从您的实际代码中错误复制的?如果您真的没有在其他地方使用它,那么请改用到目前为止找到的一组指标。
const game = {
init: function(fieldWidth, fieldHeight, fieldBombs) {
const field = [];
const bombIndicies = new Set();
for (let i = 0; i < fieldWidth * fieldHeight; i++) {
field[i] = {
isBomb: false,
nearbyBombs: 0,
}
}
while (bombIndicies.size < fieldBombs) {
const index = Math.floor(Math.random() * (fieldWidth * fieldHeight));
if (!field[index].isBomb) {
field[index].isBomb = true;
bombIndicies.add(index);
}
}
return field;
},
reset: function() {
// Other code
},
}
console.log(game.init(2, 2, 2));
我打算在 JS 上做 Google Mineshweeper 这样的小游戏。我需要编写函数,获取数组中 N 和 returns N 个唯一随机数的数量。用重复做数组很容易,但我不明白,没有它如何创建数组。 我使用此代码来初始化游戏字段:
const game = {
init: function(fieldWidth, fieldHeight, fieldBombs) {
let field = [];
let bombsPos = [];
for (let i = 0; i < fieldWidth * fieldHeight; i++) {
field[i] = {
isBomb: false,
nearbyBombs: 0,
}
}
for (let i = 0; i < fieldBombs; i++) {
// It's possible to repeat numbers!!!
bombsPos[i] = Math.floor(Math.random() * (fieldWidth * fieldHeight));
field[bombsPos[i]].isBomb = true;
}
return field;
},
reset: function() {
// Other code
},
}
console.log(game.init(2, 2, 2));
那么,你能帮我解决这个问题吗?提前致谢。
改为使用 while
循环,而 bombsPos
数组长度小于 fieldBombs
数字:
while (bombsPos.length < fieldBombs) {
const index = Math.floor(Math.random() * (fieldWidth * fieldHeight));
if (!field[index].isBomb) {
field[index].isBomb = true;
bombsPos.push(index);
}
}
const game = {
init: function(fieldWidth, fieldHeight, fieldBombs) {
let field = [];
let bombsPos = [];
for (let i = 0; i < fieldWidth * fieldHeight; i++) {
field[i] = {
isBomb: false,
nearbyBombs: 0,
}
}
while (bombsPos.length < fieldBombs) {
const index = Math.floor(Math.random() * (fieldWidth * fieldHeight));
if (!field[index].isBomb) {
field[index].isBomb = true;
bombsPos.push(index);
}
}
return field;
},
reset: function() {
// Other code
},
}
console.log(game.init(2, 2, 2));
但您似乎没有使用 bombsPos
数组。这是故意的,还是从您的实际代码中错误复制的?如果您真的没有在其他地方使用它,那么请改用到目前为止找到的一组指标。
const game = {
init: function(fieldWidth, fieldHeight, fieldBombs) {
const field = [];
const bombIndicies = new Set();
for (let i = 0; i < fieldWidth * fieldHeight; i++) {
field[i] = {
isBomb: false,
nearbyBombs: 0,
}
}
while (bombIndicies.size < fieldBombs) {
const index = Math.floor(Math.random() * (fieldWidth * fieldHeight));
if (!field[index].isBomb) {
field[index].isBomb = true;
bombIndicies.add(index);
}
}
return field;
},
reset: function() {
// Other code
},
}
console.log(game.init(2, 2, 2));