您的位置:首页 > Web前端 > JavaScript

javaScript随机生成一个5位以内的数,及数组对象Array原型forEach解析

2016-04-16 15:14 886 查看
记录:自学JavaScript一个半月,开始有点起色。通过在贴吧和csdn论坛上回答问题或看别人的答案,学习积累实战经验。

分享:下面我就来分享一个在贴吧遇到的比较常见的问题【如何生成一个5位以内的整数】

-->>思路分析,首先我们看到的是随机生成,于是乎就想到JS的一个原生方法:Math.random(),随机生成一个0-1的数字。下面就基于这个方法来实现我们的需求。

方法一、

这是一种最简单实现办法

var iTemp = (~~(Math.random()*100000)).toString();

//随机生成0-1的数,乘上100000得到一个整数位数最大为5的浮点数,按位取反,得到整数结果,并转换成字符串,赋值给iTemp

console.log('随机数 ' + iTemp.length + '位\n' + iTemp);//打印出字符串的长度

console.log('分别是:');

iTemp.split('').forEach(function(v){//将字符串分割成数组,利用forEach遍历数组元素,并打印出整数的每一位

console.log(v);

});
在Firefox、Chrome及IE9+中支持forEach方法,forEach方法类似于for in,相当于for in的简写。如果我们要兼容IE6-8,那么需要对Array的原型做扩展。

console.log(Array.prototype.forEach);//IE6-8,打印出undefined,没有这个方法

Array.prototype.forEach = Array.prototype.forEach || function(fnCallback){	//兼容IE6-8 ,|| 是为了</span>防止覆盖Array原有的原型,也可以用if判断代替

if (typeof fnCallback != "function")throw new TypeError();//如果for传进来的参数不是一个函数,则抛出一个错误:TypeError

for (var i = 0; i<this.length; i++){//这个就类似于for in的写法,遍历所有元素

if (i in this)fnCallback.call(this, this[i]);//指定fnCallback函数的执行环境
}
};


这样就对IE6-8做了一个兼容,让它们也支持forEach方法!

方法二、

这个方法,其实思路也比较简单,不过效果不是特别好

var arr =[0,1,2,3,4,5,6,7,8,9];//定义一个包含0-9的数组

var a = arr[Math.floor(Math.random()*10)]+'';
//Math.floor(Math.random()*10)生成一个0-9的索引,用于取出数组中的元素,加上一个空字符串让其变成字符串
var b = arr[Math.floor(Math.random()*10)]+'';
var c = arr[Math.floor(Math.random()*10)]+'';
var d = arr[Math.floor(Math.random()*10)]+'';
var e = arr[Math.floor(Math.random()*10)]+'';

console.log(~~(a+b+c+d+e));//拼接字符串,然后取整


方法三、

这个方法和上面的类似,不过更有随机性。

var arr =[0,1,2,3,4,5,6,7,8,9], //0-9数字范围
temp_arr=[],
return_arr=[],
num = Math.floor(Math.random()*5+1);//随机生成0-5,以此确定生成数字的位数

for(var index in arr){temp_arr.push(arr[index])}//复制一份数组

for (var i = 0; i<num; i++) {
var arrIndex = Math.floor(Math.random()*temp_arr.length);//随机生成一个索引
return_arr.push(temp_arr[arrIndex]);//放入返回数组
}

console.log(~~(return_arr.toString().replace(/,/g, '')));//转成字符串然后取整


以上,希望能帮助JS初学者,本人才疏学浅,如有错误不足之处,欢迎指导斧正。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: