首页 > 代码库 > 数组2

数组2

1. ***数组: 

   API: 

     拼接和选取

     修改

     翻转

****排序: 自定义排序算法: 冒泡排序

              sort()


1. 拼接和选取: 

   拼接: 将其它元素或其它数组拼接到当前数组末尾,返回新数组

      var newArr=arr1.concat(值1,值2,arr2,......)

      强调: 1. 无权修改原对象,只能返回新对象

               2. 打散传入的数组参数——珍贵

   选取: 复制原数组中指定位置的元素组成新数组

      var subArr=arr1.slice(starti,endi+1);

      强调: 1. 无权修改原对象,只能返回新对象

               2. 规律: 所有两个参数都是下标的API,都含头不含尾

      简写: 1. 省略第二个参数: arr1.slice(starti)

                      从starti位置一直选取到结尾

               2. 不写参数: arr1.slice()——复制整个数组中所有元素

               3. 如果离结尾近: 

                      arr1.slice(arr1.length-n,arr1.length-m+1)

                      选择倒数第n到倒数第m的元素

                      arr1.slice(-n,-m+1);


2. 修改数组splice: 删除,插入,替换

    删除: arr.splice(starti,n) 从arr中starti开始,删除n个元素

        强调: 1. 不遵循含头不含尾

                 2. 直接修改原数组

                 3. starti也支持负数参数,表示倒数第n个位置

        简写: 省略第二个参数: arr.splice(starti) 删除starti后所有

        返回值: var deletes=arr.splice(starti,n)

              返回被删除的元素组成的临时新数组

    插入: arr.splice(starti,0,值1,值2,...)

              在arr中starti位置插入: 值1,值2,...

              原starti位置及其之后的值,向后顺移

        强调: 不能打散数组参数

    替换: arr.splice(starti,n,值1,值2,...)

              在arr中先删除starti位置后的n个元素

                         再在starti位置插入新元素

        强调: 删除的元素个数和插入的新元素个数不必一样

                数组自动调整length

3. 翻转数组: arr.reverse();

4. ****排序: 

    自定义排序算法: 冒泡,快速,插入

       冒泡: 原理: 

1. ***数组:

   排序: 

   栈和队列:

   二维数组:

2. ***String


1. 排序: 

    自定义排序: 冒泡

    排序API: arr.sort();

       大问题: 默认将所有元素转为字符串再按字符串排列

                  只能对字符串类型的元素正确排序

       解决: 自定义比较规则: 

         比较器函数: 专门比较任意两值大小的函数: 

                   要求: 两个参数: a,b

                            返回值: 如果a>b,就返回正数

                                        如果a<b,就返回负数

                                        如果a=b,就返回0

         最简单的数字比较器函数: 

           function compare(a,b){return a-b;}

         如何使用: 将比较器函数名作为参数传入sort函数中

           arr.sort(compare) //强调: 不要加()

           compare函数作为参数传入sort中,被sort反复调用

         降序: 颠倒比较器函数的正负号,可改升序为降序

           最简单的数字降序比较器函数: 

              function compare(a,b){return b-a;}


2. 栈和队列: js中没有专门的栈和队列类型

                   一切栈和队列都是用普通数组模拟的

   栈: 一端封闭,只能从另一端进出的数组

    特点: FILO

   何时: 今后只要希望始终使用最新的元素时

   如何: 

      1. 从结尾出入栈: 

          入: arr.push(值) => arr[arr.length]=值

          出: var last=arr.pop()

          特点: 每次出入栈,都不影响其他元素的位置

      2. 从开头出入栈:

          入: arr.unshift(值)

          出: var first=arr.shift()

          特点: 每次出入栈,其它元素位置都会依次顺移

         

   队列: 只能从一端进入,从另一端出的数组

     特点: FIFO

   何时: 只要希望按先后顺序使用数组中的元素时

     1. 结尾入: 入: arr.push(值)

     2. 开头出: var first=arr.shift()

        

3. 二维数组: 

  什么是: 数组中的元素又引用了另一个子数组

  何时: 1. 保存横行竖列的二维数据结构

           2. 对一组数据,再进行细致分类时

  如何: 

     创建: 2种:

        1. 创建数组时,还不知道子数组的内容: 

            var arr=[];

            arr[0]=[值1,值2,...]; 

            arr[1]=[值1,值2,...];

        2. 创建数组同时初始化元素:

             var arr=[

                   [值1,值2,...],

                   [值1,值2,...],

                   ...

             ]

     访问: arr[r][c]->用法和普通数组元素的用法完全一样

         强调: 二维数组,行下标r不能越界!——报错!

     遍历: 外层循环控制行,内层循环控制列

        for(var r=0; r<arr.length; r++){//遍历每一行

            for(var c=0;c<arr[r].length;c++){//遍历第r行中每一列

            arr[r][c]//当前元素

            }

        }


     练习: Math.random() 生成0~1之间的一个随机小数


本文出自 “祝融与火” 博客,谢绝转载!

数组2