我正在尝试从一个数组项目[]中选择一个九位数的项目,将其改组并且不重复。
但是我的代码选择了九个以上的重复项
如何将其更改为只有九个,没有重复项和
怎么可能
我需要做些什么改变?
window.onload = rnumber();
function rnumber() {
const
items = [
{ label: '1', url: '1.jpg' },
{ label: '2', url: '2.jpg' },
{ label: '3', url: '3.jpg' },
{ label: '4', url: '4.jpg' },
{ label: '5', url: '5.jpg' },
{ label: '6', url: '6.jpg' },
{ label: '7', url: '7.jpg' },
{ label: '8', url: '8.jpg' },
{ label: '9', url: '9.jpg' },
{ label: '10',url: '10.jpg' }
];
var lastnumber=0;
for (let index = 0; index < 9; index++)
{
randomIndex = Math.floor(Math.random() * items.length);
if(lastnumber!=randomIndex)
{
item = items[randomIndex];
lastnumber=randomIndex;
console.log(item);
}
else
{
rnumber();
}
}
}
答案 0 :(得分:1)
您需要选择不替换的项目。选取时,您可以从items
数组中删除随机选取的项目:
window.onload = rnumber();
function rnumber() {
const items = [
{ label: '1', url: '1.jpg' },
{ label: '2', url: '2.jpg' },
{ label: '3', url: '3.jpg' },
{ label: '4', url: '4.jpg' },
{ label: '5', url: '5.jpg' },
{ label: '6', url: '6.jpg' },
{ label: '7', url: '7.jpg' },
{ label: '8', url: '8.jpg' },
{ label: '9', url: '9.jpg' },
{ label: '10',url: '10.jpg' }
];
const randItems = Array.from(
{ length: 9 },
() => {
const randomIndex = Math.floor(Math.random() * items.length);
const [item] = items.splice(randomIndex, 1);
return item;
}
);
console.log(randItems);
}
请注意,这将对原始items
数组进行变异。如果要保留它(例如带有一副纸牌,以后可以重复使用),请先slice
将其复制,然后对切成薄片的副本进行突变;
const slicedItems = items.slice();
// ...
const randomIndex = Math.floor(Math.random() * slicedItems.length);
const [item] = slicedItems.splice(randomIndex, 1);
答案 1 :(得分:0)
使用下划线的随机播放方法:
newitems = _.shuffle(items);
newitems = newitems.splice(0, 9);
答案 2 :(得分:0)
我将创建一个索引数组,然后随机排序,然后使用这些索引从数组中选择元素。
const items = [
{ label: '1', url: '1.jpg' },
{ label: '2', url: '2.jpg' },
{ label: '3', url: '3.jpg' },
{ label: '4', url: '4.jpg' },
{ label: '5', url: '5.jpg' },
{ label: '6', url: '6.jpg' },
{ label: '7', url: '7.jpg' },
{ label: '8', url: '8.jpg' },
{ label: '9', url: '9.jpg' },
{ label: '10',url: '10.jpg' }
];
// make range array 0 - 8
let randIndexes = Array.from({length: 9}, (_,i) => i)
// shuffle it
randIndexes.forEach((_, i, a) => {
const j = Math.floor(Math.random() * (i + 1));
[a[i], a[j]] = [a[j], a[i]];
})
// use the indexes to access the array however you please.
randIndexes.forEach(index => console.log(items[index]))
当然,如果您不介意混淆顺序,则可以直接将items
数组洗牌。