1、理论
1.Math.random(); 结果为0-1间的一个随机数(包括0,不包括1) ,可均衡获取0到1的随机整数。
2.Math.floor(num); 参数num为一个数值,函数结果为num的整数部分(向下取整)。
parseInt()和Math.floor()结果都是向下取整。
parseInt() 函数可解析一个字符串,并返回一个整数。
3.Math.round(num); 参数num为一个数值,函数结果为num四舍五入后的整数(四舍五入)。
4.Math.ceil(n); 返回大于等于n的最小整数(向上取整)。
2、三中方法对随机数取整的比较
1.用Math.ceil(Math.random()*10);时,主要获取1到10的随机整数,取0的几率极小。
2.用Math.round(Math.random()*10);时,可基本均衡获取0到10的随机整数,其中获取最小值0和最大值10的几率少一半。
3.用Math.floor(Math.random()*10);时,可均衡获取0到9的随机整数。
优先使用Math.floor(Math.random()*10);取随机整数,但需要做一定的处理,如取[0,10]的随机整数,
Math.floor(Math.random()*11)
如果成从minNum到maxNum的随机数,如生成[4,14]之间的随机数,则可以写成
parseInt(Math.random()*(14-4+1)+10,10);
Math.floor(Math.random()*(14-4+1)+10);
3、生成从[min,max]的随机数
//生成从[min,max]的随机数
//Math.floor(Math.random()*minNum+1); 可以用替换为
//parseInt(Math.random()*(max-min+1)+min,10);
function randomNum(min,max){
switch(arguments.length){
case 1:
return Math.floor(Math.random()*minNum+1);
break;
case 2:
return Math.floor(Math.random()*(max-min+1)+min);
break;
default:
return 0;
break;
}
}
编写一个javscript函数 fn,该函数有一个参数 n(数字类型),其返回值是一个数组,该数组内是 n 个随机且不重复的整数,且整数取值范围是 [2, 32]。
//需要对n ,min max 的值做检查 只能为数字
// 1、n 的取值范围不能炒股 min - max
(function fn(n,min,max){
//准备一个空数组用于返回
var result = [];
for(var i=0; i<n; i+=1){
//创建一个随机数
var num = randomNum(min,max);
//对随机数检查 ,是否重复
var s = result.indexOf(num);
if(s>=0){
//随机数已经存在,需要重新循环一次
i--;
}else{
result.push(num);
}
}
// return result;
console.log(result);
})(3,2,32)
4、Array.indexOf 函数
搜索 Array 对象的指定元素并返回该元素的索引。 此函数是静态的,可在不创建对象实例的情况下调用。
var indexVar = Array.indexOf(array, item, start);
术语 | 定义 |
array | 要搜索的数组。 |
item | 要在数组中查找的对象。 |
startIndex | 可选)指定在数组中搜索的起始元素的索引号。 |
4.1返回
如果找到 item,则返回表示该元素在数组中的索引位置的编号;否则返回 -1。
在 Mozilla Firefox 中,如果调用 indexOf 时未设置 item 或将其设置为 undefined,则返回值为 undefined 的第一项的索引。 在同样的情况下,所有其他浏览器都返回 -1。
4.2备注
使用 indexOf 函数可确定某个元素在数组实例中第一次出现的索引位置。
4.3示例
下面的示例演示如何使用 indexOf 函数查找指定项的索引位置。 返回的索引是在 item 中指定的项的第一次出现。 再次调用该函数,并指定大于所找到元素的索引的起始索引值,可查找 item 的下一次出现。
var a = ['red', 'blue', 'green', 'blue'];
var myFirstIndex = Array.indexOf(a, "blue");
// View the results: "1"
alert("myFirstIndex: " + myFirstIndex);
var mySecondIndex = Array.indexOf(a, "blue", (myFirstIndex + 1) );
// View the results: "3"
alert("mySecondIndex: " + mySecondIndex);