这里我有一个数组未定义的元素.我试图打印这个数组的随机元素并剪切它.在这里我的代码.
function rand(min, max){
return (Math.floor(Math.random() * (max - min + 1)) + min).toFixed(0);
}
$('#do').click(function(){
var count = chamarr.length;
var num = 0;
if (count == 1) {
$('#output').html('Nothing can found');
} else {
num = rand(1,chamarr.length);
$('#output').html(chamarr[num]);
chamarr.splice(num,1);
}
});
Run Code Online (Sandbox Code Playgroud)
当我记录一个阵列被切割时,我看到它总是好的,但有时候元素没有切割!
我的猜测是问题在于你的randnum方法:
function rand(min, max){
return (Math.floor(Math.random() * (max - min + 1)) + min).toFixed(0);
}
Run Code Online (Sandbox Code Playgroud)
我相信这会给你一个范围内的价值[min, max]- 包括两端.(嗯,实际上,它会给你一个字符串版本的值作为toFixed返回一个字符串,但是当你以后使用它时它会被强制回一个数字.)
现在你这样称呼它:
num = rand(1,chamarr.length);
Run Code Online (Sandbox Code Playgroud)
因此,如果数组长度为6个元素,则您将获得该范围内的值[1, 6].但是接下来你会尝试chamarr[num]- 并且有效索引的范围是[0, 5]数组从0开始.如果您尝试使用元素6,那将会给您undefined- 但是然后在元素6处拼接将不会执行任何操作.
我会改变你的rand方法在上限是独占的,像这样:
function rand(min, max) {
return (Math.floor(Math.random() * (max - min)) + min).toFixed(0);
}
Run Code Online (Sandbox Code Playgroud)
然后像这样调用它:
num = rand(0, chamarr.length);
Run Code Online (Sandbox Code Playgroud)
这将为您提供索引和拼接的正确范围内的值.
编辑:回应评论等:
这可能是值得删除功能的toFixed(0)一部分rand; 你不真的想要一个字符串,毕竟.这不是以前错误的一部分,但它通常更清洁:
function rand(min, max) {
return Math.floor(Math.random() * (max - min)) + min;
}
Run Code Online (Sandbox Code Playgroud)您可能还需要一个0隐式下限的函数版本
Math.floor()/ Math.random()调用而不是单独的函数,但我个人想要让它们远离那些想要得到的"逻辑"代码随机数并使用它.for包含下限和独占下限等的循环.| 归档时间: |
|
| 查看次数: |
181 次 |
| 最近记录: |