我想使用一个生成两个长度相同的数组的函数,但第一个和第二个数组的值不应该是重复的,第一个数组中的值都不应该在第二个数组中。
到目前为止我尝试了什么:
function generateSiruri(width){
var exists = false;
for(var i = 0; i < width; i++){
var randomNumber = Math.floor(Math.random()*101);
var secondRandomNumber = Math.floor(Math.random()*101);
if(sir1[i] == randomNumber && sir2[i] == secondRandomNumber && randomNumber == secondRandomNumber && sir1[i] == secondRandomNumber){
exists = true;
return;
}
if(!exists){
sir1.push(randomNumber);
sir2.push(secondRandomNumber);
}
}
sortAscending(sir1);
sortAscending(sir2);
}
function sortAscending(array){
var sort;
for(i = 0; i < array.length; i++){
for(var j = 0; j < array.length; j++){
if(array[j] > array[j + 1]){
sort = array[j];
array[j] = array[j + 1];
array[j + 1] = sort;
}
}
}
return;
}
另外,如果您有更好的选择,可以使用sortAscending函数对这些数组进行排序,并在generateSiruri中提供if条件的更好选项。我现在看不到更好的选择。 THX!
答案 0 :(得分:2)
鉴于你的评论,这闻起来像homework,所以我会更多地打破这个。
从一个数组开始,使其长度为width
的两倍(迭代width*2
次):
var ary = [];
for (var i = width * 2; i > 0; i--){ /*...*/ }
然后你想要一个数字中尚未出现的数字(我们可以使用Array.prototype.indexOf()
进行检查):
var r = Math.floor(Math.random() * 101);
while (ary.indexOf(r) != -1) r = Math.floor(Math.random() * 101);
然后简单地将您的唯一值添加到数组
ary.push(r);
对它进行排序(您的冒泡排序适用于所有意图和目的),然后您可能希望通过您的函数将其返回。这里我们返回一个数组数组;使用Array.prototype.slice
我们可以将单个数组转换为两个数组:
return [ ary.slice(0, width), ary.slice(width) ];
鉴于它不是家庭作业......
function generateSiruri(width){
var ary = [];
for (var i = width * 2; i > 0; i--){
var r = Math.floor(Math.random() * 101);
while (ary.indexOf(r) != -1) r = Math.floor(Math.random() * 101);
ary.push(r);
}
ary.sort(); // (or your custom sort method)
return [ ary.slice(0, width), ary.slice(width) ];
}
答案 1 :(得分:2)
这样做:
while(sir1.length < width) {
var randomNumber = Math.floor(Math.random()*101);
if (sir1.indexOf(randomNumber) == -1)
sir1.push(randomNumber);
}
while(sir2.length < width) {
var randomNumber = Math.floor(Math.random()*101);
if ((sir2.indexOf(randomNumber) == -1) && (sir1.indexOf(randomNumber) == -1))
sir2.push(randomNumber);
}
这样,您首先使用唯一值填充sir1,然后使用也不在sir1中的唯一值分别填充sir2。