如何将这两种不同的javascript数组随机化
我有两个不同的数组,就像这样如何将这两种不同的javascript数组随机化,javascript,jquery,arrays,Javascript,Jquery,Arrays,我有两个不同的数组,就像这样 var images = [{ "src": "images2/animal_1.jpg", "title": "Dog"}, { "src": "images2/animal_2.jpg", "title": "Cat"}, { "src": "images2/animal_3.jpg", "title": "Sheep"}, { "src": "images2/animal_4.jpg", "
var images = [{
"src": "images2/animal_1.jpg",
"title": "Dog"},
{
"src": "images2/animal_2.jpg",
"title": "Cat"},
{
"src": "images2/animal_3.jpg",
"title": "Sheep"},
{
"src": "images2/animal_4.jpg",
"title": "Cow"}];
var name = ["Dog", "Cat", "Sheep", "Cow"];
我需要独立地洗牌这两个数组。但有一个条件,图像数组标题和名称数组值永远不会与同一索引一起出现。如何才能做到这一点。您需要创建两个函数。
getRandomValue()
函数将数组作为输入,并提供随机索引和值
function getRandomValue(myArray)
{
var index = Math.floor(Math.random() * myArray.length);
return [myArray[index], index];
}
现在您可以声明图像
和名称
数组
var images = [{
"src": "images2/animal_1.jpg",
"title": "Dog"},
{
"src": "images2/animal_2.jpg",
"title": "Cat"},
{
"src": "images2/animal_3.jpg",
"title": "Sheep"},
{
"src": "images2/animal_4.jpg",
"title": "Cow"}];
var name = ["Dog", "Cat", "Sheep", "Cow"];
现在我们的主要功能来了。首先,通过将图像数组传递给randomValue()
函数来获取随机图像。名字也是这样。返回的每个值都是值和索引的数组
现在比较索引,如果索引不同,则将两者作为数组返回。否则,返回函数以生成另一个
function getImgName()
{
var img = getRandomValue(images);
var nam = getRandomValue(name);
if (img[1] != nam[1])
return getImgName();
else
return [img[0], nam[0]];
}
您需要创建两个函数。
getRandomValue()
函数将数组作为输入,并提供随机索引和值
function getRandomValue(myArray)
{
var index = Math.floor(Math.random() * myArray.length);
return [myArray[index], index];
}
现在您可以声明图像
和名称
数组
var images = [{
"src": "images2/animal_1.jpg",
"title": "Dog"},
{
"src": "images2/animal_2.jpg",
"title": "Cat"},
{
"src": "images2/animal_3.jpg",
"title": "Sheep"},
{
"src": "images2/animal_4.jpg",
"title": "Cow"}];
var name = ["Dog", "Cat", "Sheep", "Cow"];
现在我们的主要功能来了。首先,通过将图像数组传递给randomValue()
函数来获取随机图像。名字也是这样。返回的每个值都是值和索引的数组
现在比较索引,如果索引不同,则将两者作为数组返回。否则,返回函数以生成另一个
function getImgName()
{
var img = getRandomValue(images);
var nam = getRandomValue(name);
if (img[1] != nam[1])
return getImgName();
else
return [img[0], nam[0]];
}
首先,用你的牌洗牌一个数组,例如 现在,再次洗牌该结果,但现在使用已知的移动每个元素的算法:
function shuffleMove(array) {
var i = array.length;
while (--i) {
// Notice the difference to the normal algorithm:
// j will be a number different from i
var j = Math.floor(Math.random() * i);
var temp = array[i];
array[i] = array[j];
array[j] = temp;
}
return array;
}
在您的情况下,其用途是:
images.shuffle();
var names = [];
for (var i=0; i<images.length; i++)
names[i] = images[i].title;
shuffleMove(names);
images.shuffle();
变量名称=[];
对于(var i=0;i首先,用你的数组洗牌一个数组,例如
现在,再次洗牌该结果,但现在使用已知的移动每个元素的算法:
function shuffleMove(array) {
var i = array.length;
while (--i) {
// Notice the difference to the normal algorithm:
// j will be a number different from i
var j = Math.floor(Math.random() * i);
var temp = array[i];
array[i] = array[j];
array[j] = temp;
}
return array;
}
在您的情况下,其用途是:
images.shuffle();
var names = [];
for (var i=0; i<images.length; i++)
names[i] = images[i].title;
shuffleMove(names);
images.shuffle();
变量名称=[];
对于(var i=0;i要洗牌数组,请使用Knuth的洗牌。为了满足条件,每次迭代都需要检查并在必要时重新滚动
for (var i = name.length-1; i > 0; i--) {
while(1) {
var index = Math.floor(Math.random() * i);
// check condition
if (name[index] === images[i].title)
continue;
// swap
var temp = name[i];
name[i] = name[index];
name[index] = temp;
break;
}
}
要洗牌数组,请使用Knuth的洗牌。为了满足条件,每次迭代都需要检查并在必要时重新滚动
for (var i = name.length-1; i > 0; i--) {
while(1) {
var index = Math.floor(Math.random() * i);
// check condition
if (name[index] === images[i].title)
continue;
// swap
var temp = name[i];
name[i] = name[index];
name[index] = temp;
break;
}
}
不要“洗牌”两个数组;只有第二个数组。然后用第二个数组的随机值引用第一个数组。我对你的问题的理解是,每个数组的结果顺序之间有一个条件。如果是这样的话,那么洗牌就不是真正独立的。这对吗?你为什么需要它?这会使你的洗牌产生偏差。不是吗“洗牌"两个数组;只有第二个数组。然后用第二个数组的随机值引用第一个数组。我对你的问题的理解是,每个数组的结果顺序之间有一个条件。如果是这样的话,那么洗牌就不是真正独立的。这对吗?你为什么需要这样做?这会使你的洗牌产生偏差链接答案/问题的标准算法。链接答案/问题的标准算法。