发表于: 2017-07-15 23:37:45
4 818
今天完成的事:
解决了动态检测输入框的问题,添加一个onchange()就可以了,它是当失去焦点的时候执行括号内的函数,还有一个oninput()事件,它是实时的,也就是当对象活动的时候就可以执行函数;
学习了新的洗牌算法并成功将数组乱序;
学习了键盘事件,就是使用onkeydown(),它会在用户按下一个键盘按键时发生,也就是当你输入的时候就会开始执行;
明天计划的事:
学习正则表达式;
将输入值限制在一个范围内;
完成task2;
遇到的问题:
都是数组乱序引发的问题,最初想把杀手和平民两个数组推到一个数组内的时候发现我的方法得出来的只是单纯的角色数量,并没有生成与数量相等的字符串,如下图:
想到通过声明数组的方式来解决问题,然后使用循环函数,如果小于杀手数组的长度就推入“杀手”字符串
然后又引发一个新问题,就是平民数量的推入,如果用同样的方法循环继续推入,由于杀手已经占了一个位置,这就会导致平民会少推入一个,所以通过length-1的方式来解决
测试的时候发现杀手数量一旦变多,平民的数量就会出现问题,因为上面的公式将长度固定减1。先是想设置减去assign.length长度来抵消之前推入的杀手数量,但这会导致结果为0从而进入一个无限循环,因为它跟减号前的值相等,都是动态变化的。后来设置了一个临时数组来保存推入杀手后的数组长度,再减去这个临时数组就成功解决了问题
最后就是乱序的问题了,本想用上个任务的洗牌算法,但想到去重的问题没法实现就放弃了,因为数组内有很多重复的值,没办法使用indexof检测,后来经查找发现了一个新的写法:
这个方法最开始被下面那个循环赋值给绕懵圈了,于是拿了小本子演算一遍大概了解了这个方法的意思,简单讲就是两两交换,用这种方式来打乱数组就不怕重复的问题了;
收获:
学习了动态检测输入框的方法,没想到只用一个事件就可以了;
学习了新的洗牌算法,通过两两交换的方式来打乱数组,对数组内有重复值的情况下非常好用;
评论