1.输入10个成绩,求总分,最高分,最低分
<script type="text/javascript"> var arr = new Array(80,70,86,58,90,35,89,67,50,99); var sum = 0; var maxd = 0; var mind = 100; for(var i=0;i<arr.length;i++){ sum = sum +arr[i]; if(arr[i]>maxd){ maxd = arr[i]; } if(arr[i]<mind){ mind = arr[i]; } } alert(sum); alert(maxd); alert(mind); </script>
这个题的解题思路就是先设定好一个最大值和最小值,然后让我们的变量arr[i]分别和最大值、最小值作比较,然乎通过转换赋值的形式来得到我们想要得到的最大和最小值
2.往数组里面添加数据的时候去重
方法一(比较笨重,但是粗俗易懂):
<script type="text/javascript"> var a = prompt("请输入一个数字:"); var arr = new Array(1,2,3,4,5); var z = 0; for(var i=0;i<arr.length;i++){ if(a == arr[i]){ z = 1; break; } } if(z==0){ arr.push(a); }else{ alert("该数据在数组里面已存在!"); } </script>
当输入9的时候没有弹出提示框,说明9已经添加进这个数组中
方法二.运用 var.indexof()
<script type="text/javascript"> var a = parseInt(prompt("请输入一个数字:"));---------------------在这里一定要注意,要把字符串转换成整数 var arr = new Array(1,2,3,4,5); alert(arr.indexOf(a)); //判断数据是否在数组里面存在,如果要检索的字符串值没有出现,则该方法返回 -1;另外indexOf() 方法对大小写敏感!Of的O为大写! </script>
在对话框输入一个值(这个值在数组中),那么指示框弹出的的是这个值的索引
在对话框输入一个值(这个值不在数组中),那么指示框弹出的的是这个值的索引就为-1
3.冒泡排序(比如从大到小排序)【*要重点学习一下】
我们拿个表格先来分析一下这个数组:
<script type="text/javascript"> var arr = new Array(70,34,60,49,20,59,98,100); var zj = 0;//中间变量 //第一次for用来控制比较的轮数,i代表轮次 for(var i=1;i<arr.length;i++){ //控制每轮比较几次的 for(var j=0;j<arr.length-i;j++){ if(arr[j]<arr[j+1]){ //实现交换 zj = arr[j]; arr[j]=arr[j+1]; arr[j+1]=zj; } } } alert(arr[0]); </script>
验证一下其他数据是否正确
<script type="text/javascript"> var arr = new Array(70,34,60,49,20,59,98,100); var zj = 0; for(var i=1;i<arr.length;i++){ for(var j=0;j<arr.length-i;j++){ if(arr[j]<arr[j+1]){ zj = arr[j]; arr[j]=arr[j+1]; arr[j+1]=zj; } } } alert(arr[2]); </script>
4.在数组里面查找数据,找到数据所在位置的索引
方法一:
<script type="text/javascript"> var arr = new Array(1,2,3,4,5,6,7,8,9,10); var a = 6; alert(arr.indexOf(a)); </script>
方法二:
<script type="text/javascript"> var arr = new Array(1,2,3,4,5,6,7,8,9,10); var a = 6; for(var i=0;i<arr.length;i++){ if(a==arr[i]){ alert(i); } } </script>
方法三:二分法查找数据(数据是海量的话,我们得学会用能用二分法),但是要求数组必须是排好序的
<script type="text/javascript"> var arr = new Array(1,2,3,4,5,6,7,8,9,10); var a = 6; var minx = 0; var maxx = arr.length-1; while(true){ var zjx = parseInt((minx+maxx)/2); if(zjx==minx){ if(a==arr[zjx+1]){ alert(zjx+1); break; } } if(a==arr[zjx]){ alert(zjx); break; }else if(a>arr[zjx]){ minx = zjx; }else{ maxx = zjx; } } </script>
二分法原理:折半查找,每次看做把表分成两半,因为已经排序,所以只需要和中间数比较就能确定是在哪一半,然后不断分成两半,直到匹配。可以运用二分法来完成海量数据的检索。比如var arr=new Array (1,2,3,4,5,6,7,8,9);这组数组,最小的索引是0,最大的索引是8。把最大和最小索引取个平均值,索引是4,分成的2组数组就是0-4和5-8。看中间的索引,对应的元素是5,而目标值是6>5,索引0-4的数组就不需要考虑了,值考虑索引为5-8的数组。再取索引为5-8的平均值为6(取整数),数组的索引又分成了5-6和7-8。索引6对应的元素是7,目标值是6<7,所以索引7-8的数组就不需要考虑了。以此类推逐步减小目标值的范围,找出目标值的索引。