87,907
社区成员
发帖
与我相关
我的任务
分享
// 获取元素
var front = document.getElementById('front');
var spans = front.children;
// 在16个span里随机生成1-8的数字,每个数字出现两次
//用来存放1~8 8个随机数;
var arr1 = [];
//用来存放0~15 16个随机数;
var arr2 = [];
for (var i = 0; i < spans.length / 2; i++) { //这里如果用 i < span.length,会在第9次循环时导致find()函数冲突
var random1 = getRandom1();
var random2 = getRandom2();
// 判断随机数1-8在数组中是否出现过, 没有出现过的话就把随机数放到arr1中;
if (!find(random1, arr1)) {
arr1.push(random1);
// 判断随机数0-15在数组中是否出现过, 没有出现过的话就把随机数放到arr2中;
if (!find(random2, arr2)) {
arr2.push(random2);
spans[random2].innerHTML = random1; // 会随机在16个span里生成数字,但random2会随机到重复的数字,有数字的span少于8个
}
} else {
i--;//重复的话就返回重新循环
}
// 此时只有部分span中有数字
}
console.log(arr1);
console.log(arr2);
console.dir(spans);
//查找item在arr中是否出现过,出现过返回true,没出现过返回false;
function find(item, arr) {
for (var i = 0; i < arr.length; i++) {
if (item === arr[i]) return true;
}
return false;
}
// 生成随机数1-8
function getRandom1(random) {
var random = Math.ceil((Math.random() * spans.length / 2));
return random;
}
// 生成随机数0-15,用于span盒子
function getRandom2(random) {
var random = Math.floor((Math.random() * spans.length));
return random;
}
//其实这种方法做的随机排序,可以不要a,b两个参数,就这样就行
arr.sort(() => Math.random() - 0.5);
至于sort的更详细,你可以自行搜索Array.sort
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8];
arr.sort((a, b) => Math.random() - 0.5);
console.log(arr);
var arr = [];
for (var i = 1; i <= spans.length / 2; i++) {
arr.push(i,i);
}
for (var i = 0; i < spans.length; i++) {
spans[i].innerHTML = arr.splice(Math.floor((Math.random()*arr.length)),1)[0];
}