首页 > 代码库 > JS数组练习

JS数组练习

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的数组就不需要考虑了。以此类推逐步减小目标值的范围,找出目标值的索引。

JS数组练习