从数组中随机抽取相同的值会重复

时间:2018-10-17 01:04:49

标签: javascript

我有一个包含29个值的数组。我从数组项中随机选择9个值。

我的问题是,在随机选择 9个元素时,值在选定的9个元素中多次重复

如何避免重复使用相同的元素

var items = [  
      { label: '1', url: '1.png'  },
      { label: '2', url: '2.png'  },
      { label: '3', url: '3.png'  },
      { label: '4', url: '4.png'  },
      { label: '5', url: '5.png'  },
      { label: '6', url: '6.png'  },
      { label: '7', url: '7.png'  },
      { label: '8', url: '8.png'  },
      { label: '9', url: '9.png'  },
	  { label: '10', url:'10.png' },
      ];
	  
	  
for (var index = 0; index <4; index++) 
     {
      randomIndex = Math.floor(Math.random() * items.length);
  console.log(randomIndex);
   
    }

2 个答案:

答案 0 :(得分:3)

您需要选择不替换的项目。一种方法是在选择随机项目时将其从数组中删除:

var items=[{label:'1',url:'1.png'},{label:'2',url:'2.png'},{label:'3',url:'3.png'},{label:'4',url:'4.png'},{label:'5',url:'5.png'},{label:'6',url:'6.png'},{label:'7',url:'7.png'},{label:'8',url:'8.png'},{label:'9',url:'9.png'},{label:'10',url:'10.png'},]

for (var index = 0; index < 9; index++) {
  const randomIndex = Math.floor(Math.random() * items.length);
  const [randomItem] = items.splice(randomIndex, 1);
  console.log(randomItem);
}

如果您需要原始数组保持原样且无突变,则可以先创建一个副本,然后从该副本中删除项目:

const itemsTemp = items.slice();

答案 1 :(得分:2)

您可以使用Set。因为它不允许重复的元素,所以您可以继续添加直到其大小达到9。

v-bind:class="['mdc-tab-indicator', { 'mdc-tab-indicator--active': index === tabs.currentTab }]"

只要要从中选择的数组明显大于要选择的项目数,此方法就很好用。如果不是这样,由于一遍又一遍地选择重复的元素,性能可能会受到影响。