之前和大家分享了一部分web前端开发(http://www.maiziedu.com/course/web-px/)之Javascript中的随机数,希望对大家有用。今天继续给大家案例。废话不多说,见下文:
随机洗牌随机洗牌在JavaScript中是一个典型的算法,创建一个数组,通过洗牌算法,将结果放在一个新数组,然后每次弹出一个数组元素:
var numPool = [13, 21, 36, 14, 27, 10];
function shuffle (numPool) {
for (var j, x, i = numPool.length; i; j = parseInt(Math.random() * i), x = numPool[--i], numPool = numPool[j], numPool[j] = x);
return numPool;
}
var randomResult = shuffle(numPool);
while (randomResult.length > 0) {
console.log(randomResult.pop());
}
上面的示例是在创建的数组中做随机排序,然后将数组的每个元素取出来。下面我们来看另一个示例,从一个范围内(比如 0~1000 )随机取 12 数,并将他们创建成一个数组,同时取出数组中最后一个子元素。
var numReserve = [];while (numReserve.length < 12) {
var randomNumber = Math.ceil(Math.random() * 1000);
var found = false;
for (var i = 0; i < numReserve.length; i++) {
if (numReserve === randomNumber) {
found = true;
break;
}
}
}if (!found) {
numReserve[numReserve.length] = randomNumber;
}
随机密码这些方法创建一个随机数字是足够了,但要使用 Math.random() 创建一个加密的随机安全密码是 指数数据计算方案 ,来避免这种错误:
function round(value, decimals) {
return Number(Math.round(value+'e'+decimals)+'e-'+decimals);
}
round(1.005,2); // => 1.01
Epsilon( ε )舍入在ES6中提供了另一种方法,处理小数四舍五入。 Machine epsilon 提供了一个合理的方法,比较两个浮点数合理处理这个误差。
在Chrome的控制台中输入:
0.1 + 0.2 // => 0.300000000000000040.1 + 0.2 === 0.3 // => false
通过 Math.EPSILON 函数可以做出一个正确的比较:
function epsEqu(x, y) {
return Math.abs(x - y) < Number.EPSILON * Math.max(Math.abs(x), Math.abs(y));
}
Math.EPSILON 接受两个参数,一个是需要计算的表达式,另一个是需要做为比较的预期结果,然后用这两个值作为比较:
epsEqu(0.1 + 0.2, 0.3); // => true
如果有什么不对的地方,还希望大家多多指出,共同进步!