如何确保项目不会被推入数组两次?

时间:2017-11-09 01:15:48

标签: javascript arrays

我想在我的页面上显示四个随机图像,因此首先我要从初始图像阵列创建一个随机图像:

function randomFlag() {
var randomFlag = Math.floor(Math.random() * flags.length);
return flags[randomFlag];
}

然后我将四个随机图像推入一个新阵列:

function generateRandomFlag(num) {
var arr = [];
for (var i = 0; i < num; i++) {
    arr.push(randomFlag());
}
return arr;
}

我遇到的问题是,有时我会将相同的图像两次推入数组,最终显示两个或更多相同的图像而不是四个随机图像。

如何创建首先检查图像中是否已存在图像的功能,只有在图像中不存在图像时才推送它?

感谢。

2 个答案:

答案 0 :(得分:2)

替代方法是使用随机洗牌的所有标志

for tt in range(len(service_areas)):
    plt.plot([columnstart, columnend], [tot_hrs, tot_hrs], color='#228B22', linestyle='-', linewidth=2)
    columnstart +=1
    columnend +=1

在ES2015 +它更简洁

function generateRandomFlag(num) {
    return flags
    .slice() // copy the flags array because .sort mutates the source array
    .sort(function() { return Math.random() - 0.5; }) // shuffle the copied array
    .slice(-num); // get the LAST "num" values of the shuffled array
}

答案 1 :(得分:0)

您可以重构generateRandomFlagrandomFlag。在我的情况下,我将重构generateRandomFlag

function generateRandomFlag(num) {
  var arr = [];
  var reachNum = false;
  var ctr=0;
  while (!reachNum) {
    var flag = randomFlag();
    if (arr.indexOf(flag)==-1)
    {
      arr.push(flag);    
      ctr++;
    }
    if (ctr==num)
       reachNum = true;
  }
 return arr;
}