发表于: 2019-10-06 16:09:59

1 819


今天完成的事:完成了任务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 对象存储的是没有截止日期的数据。当浏览器被关闭时数据不会被删除,在下一天、周或年中,都是可用的。



返回列表 返回列表
评论

    分享到