编辑:如果你读过Matt Bryant的答案,你会发现它应该可以工作,但是他使用了indexOf()方法,而且该方法不适用于IE 8或更高版本,我需要它才能在IE 8上工作。我尝试这样做是为了解决indexOf()方法,但它无法正常工作。
var tester = -1;
for (var test=0; test<xposition.length; test++) {
if (x == xposition[0]) {
tseter = x;
}
}
知道为什么它不起作用?
原始问题: 所以我想生成随机数字对,但前提是数字对尚未生成。这是我尝试过的,希望如果您阅读我尝试过的内容,您将会理解我需要的是什么。
function randomPairs() {
var xposition = []; //array which holds all x coordinates
var yposition = []; //array which holds all y coordinates
for (var i=0; i<5; i++) { //do everything below 5 times (generate 5 pairs)
var x = getRandom(1,7); //generate new x point
var y = getRandom(2,7); //generate new y point
if ( jQuery.inArray(x, xposition) ) { //if newly generated x point is already in the xposition array (if it was already previously generated
var location = xposition.indexOf(x) //find the index of the existing x
if (y == yposition[location]) { //if the newly generated y points equals the same y point in the same location as x, except in the yposition array
while ( y == yposition[location]) {
y = getRandom(2, 7); //change y
}
}
}
}
xposition.push(x); //put x into the array
yposition.push(y); //put y into the array
}
那么,任何想法为什么它不起作用?我正确使用jQuery.inArray()和.indexOf()方法吗?
哦,getRandom是
function getRandom(min, max) {
return min + Math.floor(Math.random() * (max - min + 1));
}
基本上,它会在最小值和最大值之间生成一个数字。
此外,当我尝试
时alert(xposition);
alert(yposition);
它是空白的。
答案 0 :(得分:3)
问题是您要将x
和y
添加到循环外的数组中。对此的修复(加上删除不需要的jQuery)是:
function randomPairs() {
var xposition = []; //array which holds all x coordinates
var yposition = []; //array which holds all y coordinates
for (var i=0; i<5; i++) { //do everything below 5 times (generate 5 pairs)
var x = getRandom(1,7); //generate new x point
var y = getRandom(2,7); //generate new y point
var location = xposition.indexOf(x);
if (location > -1) { //if newly generated x point is already in the xposition array (if it was already previously generated
if (y == yposition[location]) { //if the newly generated y points equals the same y point in the same location as x, except in the yposition array
while ( y == yposition[location]) {
y = getRandom(2, 7); //change y
}
}
}
xposition.push(x); //put x into the array
yposition.push(y); //put y into the array
}
}
请注意,您应该从此函数返回一些内容。
如果您必须支持旧浏览器,请替换
行var location = xposition.indexOf(x);
与
var location = jQuery.inArray(x, xposition);
答案 1 :(得分:0)
这种方法的一个主要问题是,当有多个具有相同x或y值的唯一对时,您必须考虑这些情况。
x = [1, 1, 1], y = [1, 2, 3]
请注意,当在数组中找到给定元素时,Array.indexOf仅返回第一个索引。因此,您必须从找到匹配项的索引开始递归运行它。
生成唯一的整数对的简单方法可以在没有jquery的情况下完成: http://jsfiddle.net/WaFqv/
我假设订单确实很重要,因此x = 4, y = 3 & x = 3, y = 4
将被视为两个唯一对。