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

自学JavaScript的作者分享了如何利用Math.random()生成5位以内的整数,包括三种实现方法,并简要提及Array.prototype.forEach的理解。

记录:自学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], i, this);//指定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初学者,本人才疏学浅,如有错误不足之处,欢迎指导斧正。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值