【问题标题】:Generate random number array without duplicates next to each other in Javascript? [duplicate]在Javascript中生成没有重复的随机数数组? [复制]
【发布时间】:2021-03-31 14:39:37
【问题描述】:

我有一个将随机数序列推送到空数组的函数。我不介意数组中的重复,但我真的需要它不要重复彼此相邻的数字。因此,例如 [1,2,3,4,1] 完全可以,但 [1,1,2,3,4] 不会。我尝试将 if 语句放入代码中,但我并没有完全正确。这是我用来生成数组的代码。任何帮助,一如既往,非常感谢!

let initArray = [];

function makeCircleArray(level) {
    var i = 0;
  do {
    var val = Math.floor(Math.random() * 9)
    initArray.push(val)
    i++
  }
  while (i < level.dots)
  console.log(`${initArray}`)
  return initArray;
}

【问题讨论】:

  • 您的数组是只包含一位数字还是可以包含更多位数的数字?

标签: javascript arrays math random


【解决方案1】:

如果新值与先前插入的值匹配,您可以通过不插入新值来做到这一点:

let initArray = [];

function makeCircleArray(level) {
  var i = 0;
  do {
    var val = Math.floor(Math.random() * 9);
    if (val !== initArray[initArray.length - 1]) {
      initArray.push(val);
      i++;
    }

  } while (i < level.dots);
  console.log(`${initArray}`);
  return initArray;
}

makeCircleArray({ dots: 20 });

【讨论】:

  • 第一个值需要特殊情况,也不能在发现重复项时增加循环,否则结果数组中的元素将太少。感谢提供运行代码。你比我更好:-)
  • 第一个值不需要特殊情况(它最终与undefined 进行比较,结果很好。)我纠正了增加i 过于频繁的问题;感谢您指出这一点!
  • 回滚了删除解释性文本并对代码添加微不足道的更改的编辑。请不要这样做@baymax
【解决方案2】:

保留最后一个值,如果得到相同的值,重复循环:

var last_val = null;
do {
  var val = Math.floor(Math.random() * 9);
  if(val == last_val) continue;
  initArray.push(val);  
  i++;
  last_val = val;
 } while(i < level.dots)

【讨论】:

    猜你喜欢
    • 2016-03-01
    • 2014-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 2021-06-01
    相关资源
    最近更新 更多