发表于: 2019-10-06 16:09:59
1 818
今天完成的事:完成了任务2;开始任务3;
明天要完成的事:继续任务3;
难题:看完了深度思考之后想了一下觉得自己的分配有问题;于是想了一下要改;不过越该逻辑越烂;只好先停一下:首先数组乱序的基础在于我有数组;但是我没有;其次我是直接抽取然后将抽取的值存入数组转化出杀手数组
;不过我没有生成人员的那一步所以我没有数组原因找到了 首先需要自己创建一个数组并赋予他长度为玩家数量
最后发现数组只有长度无内容。。。。
收获:稍微了解了一下jq大概有一点了解
深度思考的数组乱序:
1、splice方法
var a = [1,2,3,4,5,6]; //需要洗牌的数组
var l = a.length; //数组原始长度
var result = []; //洗牌后的数组
for (var i = 0; i < l; i++){ //循环7次:i=[0-6]
var r = Math.floor(Math.random()*a.length);
result.push(a[r]); //将原始数组随机位置的内容push到新数组中
a.splice(r,1); //将原始数组中被push的内容删除
}
2、Fisher–Yates shuffle方法
var b = [1,2,3,4,5,6,7,8];
for(var i = 0; i < b.length; i++){
var r = Math.floor(Math.random()*b.length);
var t = b[i];
b[i] = b[r];
b[r] = t;
}
这一段的后面没看懂大概是交换的过程
var t = b[i];
b[i] = b[r];
b[r] = t;
1.Fisher–Yates Shuffle
其算法思想就是 从原始数组中随机抽取一个新的元素到新数组中
从还没处理的数组中,产生一个[0, n]之间的随机数 random
从剩下的n个元素中把第 random 个元素取出到新数组中
删除原数组第random个元素
重复第 2 3 步直到所有元素取完
最终返回一个新的打乱的数组
2.Knuth-Durstenfeld Shuffle
每次从未处理的数组中随机取一个元素,然后把该元素放到数组的尾部,即数组的尾部放的就是已经处理过的元素,这是一种原地打乱的算法,每个元素随机概率也相等,时间复杂度从 Fisher 算法的 O(n2)提升到了 O(n)。
选取数组(长度n)中最后一个元素(arr[length-1]),将其与n个元素中的任意一个交换,此时最后一个元素已经确定
选取倒数第二个元素(arr[length-2]),将其与n-1个元素中的任意一个交换
重复第 1 2 步,直到剩下1个元素为止。
3.sort()方法
上面介绍的便是在各语言中都广为实现的Fisher-Yates乱序算法。但具体到JavaScript,我们其实可以结合数组自带的sort()方法编写出更简洁的代码来达到目的。
js怎样在一个函数中调用另一个函数
在另一个函数中把上一个函数名加上();
另外这边要把得到的数组储存起来;给下一个界面使用
localStorage 对象
localStorage 对象存储的是没有截止日期的数据。当浏览器被关闭时数据不会被删除,在下一天、周或年中,都是可用的。
评论