我有一个包含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);
}
答案 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 }]"
只要要从中选择的数组明显大于要选择的项目数,此方法就很好用。如果不是这样,由于一遍又一遍地选择重复的元素,性能可能会受到影响。