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);
        }

  

  

时间: 2024-10-05 20:31:08

JavaScript数组示例的相关文章

javascript 数组的深度复制

javascript 数组的深度复制 一般情况下,使用 "=" 可以实现赋值.但对于数组.对象.函数等这些引用类型的数据,这个符号就不好使了. 1. 数组的简单复制 1.1 简单遍历 最简单也最基础的方式,自然是循环处理.示例: function array_copy(arr) { var out = [], i, len; if (out[i] instanceof Array === false){ return arr; } for (i = 0, len = arr.lengt

js 的数组怎么push一个对象. Js数组的操作push,pop,shift,unshift JavaScript使用push方法添加一个元素到数组末 JavaScript数组函数unshift、shift、pop、push使用

push()函数用于向当前数组的添加一个或多个元素,并返回新的数组长度.新的元素将会依次添加到数组的末尾. 该函数属于Array对象,所有主流浏览器均支持该函数. 语法 array.push( item1 [,items... ] )参数 参数 描述item1 任意类型添加到当前数组末尾处的元素.items 可选参数/任意类型要添加到当前数组末尾处的其他项,可以有多个.注意:如果添加的元素类型为数组类型(Array),仍然会被当作一个元素看待,只是这个元素是数组类型而已.如果要合并两个数组,请使

你所不知道的JavaScript数组

你所不知道的JavaScript数组 相信每一个 javascript 学习者,都会去了解 JS 的各种基本数据类型,数组就是数据的组合,这是一个很基本也十分简单的概念,他的内容没多少,学好它也不是件难事情.但是本文着重要介绍的并不是我们往常看到的 Array,而是 ArrayBuffer. 我写的很多东西都是因为要完成某些特定的功能而刻意总结的,可以算是备忘,本文也是如此!前段时间一直在研究 Web Audio API 以及语音通信相关的知识,内容侧重于音频流在 AudioContext 各个

javascript数组操作(创建、元素删除、数组的拷贝)

这篇文章主要介绍了javascript数组操作,包括创建.元素的访问.元素删除.数组的拷贝等操作,还有其它示例,需要的朋友可以参考下 1.数组的创建 复制代码 代码如下: var arrayObj = new Array(); //创建一个数组var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限,是长度var arrayObj = new Array([element0[, element1[, ...[, elementN]]]]); 创

JavaScript 数组操作函数--转载+格式整理

JavaScript 数组操作函数(部分)--转载+格式整理 今天看了一篇文章,主要讲的对常用的Js操作函数:push,pop,join,shift,unshift,slice,splice,concat的总结.身为一个有点完美主义的强迫症患者来说,原文的格式,差点杀死我.so,这篇文章就出来了……原文:传送门. 一.push 和 pop 这两个函数都是对数组从尾部进行压入或弹出操作. push(arg1,arg2,...)可以每次压入一个或多个元素,并返回更新后的数组长度. 注意:如果参数也是

javascript数组常用的遍历方法

本篇文章给大家带来的内容是关于javascript数组常用的遍历方法(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 前言 本文主要介绍数组常见遍历方法:forEach.map.filter.find.every.some.reduce,它们有个共同点:不会改变原始数组. 一.forEach:遍历数组 1 2 3 4 5 var colors = ["red","blue","green"]; // ES5遍历数组方法

JavaScript数组(二)实例

一.Js 数组示例常用操作. $(function () { Javascript数组学习 var nums = new Array([10], [5],[ 8], [2], [3]); 数组反转 nums.reverse(); 数组排序,默认按字符串顺序排序 nums.sort(); 修改数组的值 nums[0] = 'abc';//使用下标访问数组 nums[10] = '234';//如果赋值时,指定的下标超出数组范围,则空位用undefined填充. 数组添加元素 nums.push("

[前端JS学习笔记]JavaScript 数组

一.JavaScript数组的奇葩 大多数语言会要求数组的元素是同个类型, 但是JavaScript允许数组元素为多种类型. var arr = ["羽毛球", 666, {"json:":"666"}]; console.log(arr.length); 二.JavaScript 数组的两种声明 1.var arr = [元素]; var arr = ["坚持"]; 2.new Array(); 或者 var arr2 =

JavaScript 数组去重

JavaScript 数组去重 Why underscore (觉得这部分眼熟的可以直接跳到下一段了...) 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中. 阅读一些著名框架类库的源码,就好像和一个个大师对话,你会学到很多.为什么是 underscore?最主要的原因是 underscore 简短精悍(约 1.5k 行),封装了 100 多个有用的方法,耦合度低,非常适合逐个方法阅读,适合楼主这样的 JavaScript