发表于: 2019-10-27 23:50:21

1 817



今天完成的事情:

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"));//重新转换为数组


虽是这样写了,但不知道怎么验证正确与否。玩家随机数组是否传递了过去。比较迷惑,明天问问师兄。





返回列表 返回列表
评论

    分享到