全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 python论坛
1074 0
2016-04-25

之前和大家分享了一部分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

如果有什么不对的地方,还希望大家多多指出,共同进步!


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群