javascript - 我怎样才能确保这个函数将返回一个没有任何重复的数组,并且不会减少元素的数量?

标签 javascript

我正在尝试使用 Javascript 构建扫雷器。为此,我需要一个函数来返回一个“单元格”数组,然后我可以将其用作 ID 以声明为“已开采”。它最终应该看起来像这样:["cell-4-27", "cell-14-18", "cell-9-13", ...]。第一个随机数是单元格所在的行,第二个随机数是列。只有 16 行和 30 列,这就是数字的原因。

数组的长度必须为 99,并且不包含任何重复项。但是,此函数纯粹由于随机性而返回一些重复值。我试过删除重复项,但这会减少板上的地雷数量。

我怎样才能使“minedCells”的值不重复地被推送到数字 99?

function assignMines() {
    let randoms = {
        rows: [],
        columns: []
    };

    let minedCells = [];

    for (let i = 0; i < 99; i++) {
        randoms.rows.push(Math.floor((Math.random() * 16) + 1));
        randoms.columns.push(Math.floor((Math.random() * 30) + 1));
        minedCells.push("cell-" + randoms.rows[i] + "-" + randoms.columns[i])
    }

    return minedCells;

}

最佳答案

你可以在推送之前检查该值是否已经在数组中:

function assignMines() {
  let randoms = {
    rows: [],
    columns: []
  };
    
  let minedCells = [];

  for (let i = 0; i < 99; i++) {
    let el = "cell-" + Math.floor((Math.random() * 16) + 1) + "-" + Math.floor((Math.random() * 30) + 1);
    if (minedCells.includes(el)) {
	  i--;
    } else {
      minedCells.push(el);
    }
  }
    console.log(minedCells);
}
assignMines();

关于javascript - 我怎样才能确保这个函数将返回一个没有任何重复的数组,并且不会减少元素的数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58121723/

相关文章:

javascript - 如何对特定位置使用 GET ELEMENT

javascript - 为什么大于 15 位的数字在 javascript 中会自动四舍五入?

javascript - 如何访问 Svelte 3 组件中插槽的值?

javascript - 使用 jQuery 制作图片动画

javascript - 一列数据更新后更新表(重新计算)

javascript - 单标签多内容 Bootstrap 4

javascript - 如何捕获键盘事件来自哪些键?

javascript - 连接express和MySQL azure时出现问题

javascript - 返回 tr 标签的 "value"属性

javascript - javascript中的操作系统和操作系统版本检测