我正在寻找一个Js中的“随机化器”,它让我有可能从一个数组中给定的特定列表中获得几对数据。 我的目标是让smtgh随机匹配它们而没有任何重复,并根据数据的一半给出正确的列表。 我找到了这篇文章“JavaScript:Randomy pair items from array without repeats”,并使用了这篇文章,但它给出了所有可能的偶,我只想获得前5对偶(在本例中)。 有人能帮我吗? 太多了!
null
var names = ["Sean","Kyle","Emily","Nick","Cotter","Brian","Jeremy","Kimmy","Pat","Johnny"];
pickpool = names.slice(0); // Slice the array at the first element to copy it by value
var used = [];
var picks = [];
if (names.length % 2 != 0) {
alert("You must have an even number of names. You currently have " + names.length + " names.");
}
for( var i = 0; i < names.length; i++){
var random = Math.floor(Math.random()*pickpool.length)
if(names[random] == names[i]) {
// names[random] = names[random++];
picks.push(names[i] + " gets " + pickpool[random++]);
pickpool.splice(random++,1);
} else {
picks.push(names[i] + " gets " + pickpool[random]);
pickpool.splice(random,1);
}
}
console.log("picked array: ");
for(var k=0; k<picks.length; k++) {
console.log(picks[k]);
}
null
null
var names = ["Sean","Kyle","Emily","Nick","Cotter","Brian","Jeremy","Kimmy","Pat","Johnny"];
pickpool = names.slice(0); // Slice the array at the first element to copy it by value
var used = [];
var picks = [];
if (names.length % 2 != 0) {
alert("You must have an even number of names. You currently have " + names.length + " names.");
}
for( var i = 0; i < 5; i++){
var random = Math.floor(Math.random()*pickpool.length)
if(names[random] == names[i]) {
// names[random] = names[random++];
picks.push(names[i] + " gets " + pickpool[random++]);
pickpool.splice(random++,1);
} else {
picks.push(names[i] + " gets " + pickpool[random]);
pickpool.splice(random,1);
}
}
console.log("picked array: ");
for(var k=0; k<5; k++) { //instead of the whole array stop after the fifth iteration
console.log(picks[k]);
}
使用
let trimmed = picks.slice(0, 5);
或
picks = picks.slice(0, 5);
在你的代码之后。
它将修剪除前5项以外的所有其他项
使用lodash,您可以更整洁,更简单地解决这个问题:
const names = ["Sean","Kyle","Emily","Nick","Cotter","Brian"];
return _.chunk(_.shuffle(names), 2)