zoukankan      html  css  js  c++  java
  • JavaScript数组示例

    向数组添加新元素时去重复

      1.一般的思路与原理

        var a =[3,5,8,9,2,10,4] ;//原始数组
        var x =4 ;//新数据
        var cf = false ;//设定一个判断是否重复的值
        for(var i=0;i<a.length;i++)//循环遍历
        {
            if(a[i]==x)//数据重复
            {
                cf=true;//改变设定变量的值
            }
        }
        if(cf==true)//数据重复执行的代码
        {
            alert("该数据已存在");
        }
        else//数据没有重复
        {
            a.push(x);//添加到数组中
        }
        

      2.更简便的方法,indexOf( ) 可以返回相应数据在对应数组中的索引号,如果数组中没有改数据,则会返回-1,

        所以可以用 indexOf( ) 来判断数据是否重复,

        

        var a =[3,5,8,9,2,10,4] ;//原始数组
        var x =4 ;//新数据
        var b = a.indexOf(x);//定义变量b来接收indexOf()的返回值
        if(b==-1)//返回值为-1,数组中没有该数据
        {
            a.push(x);//把数据添加到数组中
        }
        else//返回值不为-1就说明数组中有该数据
        {
            alert("该数据已存在");//数据重复执行的代码
        }

    冒泡排序

      将一个无序的无重复数组按照从大到小或从小到大的顺序重新排列,这里按照从大到小的顺序分析,原理是依次比较每两个数据的大小,把小的值往后放,即如果前一个数据小于后一个数据,则交换,如果前一个数据大于后一个数据,则不变

      首先定义一个原始数组

        var attr = [4,7,3,6,8,1,2,9,5];//原始数组

      第一个数据和第二个数据的比较和交换

        var i = 0 ;//索引为0
        var a = attr[i]<attr[i+1];//比较第一个和第二个数据
        if(a==true)//如果第一个数据小于第二个数据
        {
            //交换
            var b = attr[i];//设定一个中间变量b用来接收第一个数据的值
            attr[i] = attr[i+1];//第一个数据变为较大值
            attr[i+1] = b;//第二个数据变为较小值
        }

      如果要比较到底就要用for循环

        for(var i=0;i<attr.length-1;i++)//两两比较的次数为数组的长度减一
        {
            if(attr[i]<attr[i+1])//如果前一个数据小于后一个数据
            {
                //交换
                var b = attr[i];//设定一个中间变量b用来接收第一个数据的值
                attr[i] = attr[i+1];//第一个数据变为较大值
                attr[i+1] = b;//第二个数据变为较小值
            }
            //如果前一数据大于后一数据则无变化
        }

      输出数组发现最小值排到了最下面,按照这样最多8个轮次就可以把数据从大到小排列完毕,所以可以在外层套用一个循环来控制比较的轮次,而且轮次越往后,每轮的两两比较次数会越少,因为最小的值已经依次排好了,排好的数据个数(x)正好是轮次数(j)减一,两两比较的次数(z)是未排好的数据个数(y)减一,并且数据的总个数是length,所以 x+y=length;x=j-1;z=y-1 ==>y=z+1;==> (j-1)+(z+1)=length;==> z=length-j ,最终可以写为:

        for(var j=1;j<attr.length;j++)//控制比较的轮次,从1开始所以有attr.length-1轮
        {
            for(var i=0;i<attr.length-j;i++)//两两比较的次数为数组的长度减轮次
            {
                if(attr[i]<attr[i+1])//如果前一个数据小于后一个数据
                {
                    //交换
                    var b = attr[i];//设定一个中间变量b用来接收第一个数据的值
                    attr[i] = attr[i+1];//第一个数据变为较大值
                    attr[i+1] = b;//第二个数据变为较小值
                }
                //如果前一数据大于后一数据则无变化
            }
        }

      输出为

       如果想从小到大排序,只要把条件改为当前一数据大于后一数据时交换就可以了,即把 if 中的小于号改为大于号。

     数据排序的简便方法

      sort( )方法,默认按数据首位数字的值升序排序,可以加一个排序函数来达到按数值升序排序

        function sortNumber(a,b)
        {
            return a-b
        }
        attr.sort(sortNumber);

    二分法查找数据

      二分法适用于有序排列的数组,原理是索引取中进行判断,逐步二分舍弃缩小比较范围,最终找到数据的索引值,优点是比较次数少,在大数据查找时可以节省计算机资源

        var attr =[1,2,3,4,5,6,7,8,9,10];//原始数组
        var sr =11;//需要查找的数据
        var minxl =0;//最小索引
        var maxxl =attr.length-1;//最大索引
        var midxl =0;//取中索引
        while(true)
        {
            //索引取中
            midxl=parseInt((minxl+maxxl)/2)
            //判断是否是需要找的索引号
            if(attr[midxl]==sr)
            {
                break;//是,找到并退出循环
                }
            //判断是否只剩两个值
            if(minxl==midxl)
            {
                //判断最末索引是否是需要的索引号
                if(attr[midxl+1]==sr)
                {
                    //是,找到并退出循环
                    midxl=midxl+1
                    break;
                        }
                else
                {    //不是,没有合适的值,退出循环
                    midxl=-1;//赋予一个不可能是索引的值
                    break;
                    }
                }
            //更改检索的范围,即二分
            if(attr[midxl]<sr)
            {
                minxl=midxl;
                }
            else
            {
                maxxl=midxl;
                }    
            }
        if(midxl==-1)
        {
            alert("没有该数据");
                }
        else
        {
            alert("该数据序列号为"+midxl);
            }

      

      

  • 相关阅读:
    Jmeter之http性能测试实战 非GUI模式压测 NON-GUI模式 结果解析TPS——干货(十一)
    UI Recorder 自动化测试 回归原理(九)
    UI Recorder 自动化测试 录制原理(八)
    UI Recorder 自动化测试 整体架构(七)
    UI Recorder 自动化测试 配置项(六)
    UI Recorder 自动化测试 工具栏使用(五)
    UI Recorder 自动化测试 回归测试(四)
    UI Recorder 自动化测试 录制(三)
    UI Recorder 自动化测试工具安装问题疑难杂症解决(二)
    UI Recorder 自动化测试安装教程(一)
  • 原文地址:https://www.cnblogs.com/zxbs12345/p/7966348.html
Copyright © 2011-2022 走看看