发表于: 2019-10-27 23:50:21
1 819
今天完成的事情:
1.继续完善任务二。
2.了解数组乱序。
明天计划的事情:
1.继续推进任务。
遇到的问题及收获:
1.用洗牌算法,将当前页面的玩家数据传递到另一个页面后,再把玩家的数据写入数组
var identity = [];
function addIdentity() {
for (var i = 0; i < killer.value; i++) {
identity.push("杀手");
}
for (var j = 0; j < waterPeople.value; j++) {
identity.push("水民");
}
return identity;
}
本意是用for循环获取到分配到killer杀手和waterPeople水民的人数,再丢尽数组identity里。
2.数组乱序,上一个任务用到的是splice的方法,即每次选中一个数组中一个数,就把它删除,再从原数组选剩下的到新数组。
function myNum() {
var a = [0, 1, 2, 3, 4, 5, 6, 7, 8];
b = [];
for (var i = 0; i < 3; i++) {
var num = Math.floor(Math.random() * a.length);
b.push(a[num]);
a.splice(num, 1);
}
return b;
}//获得3个不同随机数
还有一种方法,Fisher–Yates Shuffle,
function shuffle(identity) {
var m = identity.length,
i,
t;
//定义m为数组arr的长度
while (m) {
i = Math.floor(Math.random() * m--);
t = identity[m];
identity[m] = identity[i];
identity[i] = t;
}
return identity;
}
这里就没有新建一个数组,而是从原数组上随机抽取一个数,与最后一个数交换位置,重复操作,在剩下的n-1个元素里进行相同操作,直到进行到第一个。比如数组有ABC三个元素,首先将C赋予变量t,假如从AB中获取到B,则把B赋予给C,再把t赋予给B,完成交换,结果是ACB。 对此处理解不是特别深刻。
然后是数据传递,将当前页面数据分配到另一个界面。查找资料得到
var send = JSON.stringify(identity);
sessionStorage.setItem("key",send);
首先声明一个变量send,将数组转化字符串类型,因为sessionStorage只能传递字符串。然后存入sessionStorag,在下个页面后就可以用sessionStorage.getItem获取数据:
var send = JSON.parse(sessionStorage.getItem("key"));//重新转换为数组
虽是这样写了,但不知道怎么验证正确与否。玩家随机数组是否传递了过去。比较迷惑,明天问问师兄。
评论