数组方法+数组的排序

数组(array)

当我们需要处理一组数据时,一定会定义很多变量,比较难处理。这个时候我们就需要用到数组。

概念

数组:一组数据的集合。其中每个数据被称为数组的元素。在数组中存放任意类型的数据。数组是将一组数据存储到单个变量名下的方式。

数组声明

三种声明:
1.通过new关键字创建数组。

 var arr = new Array(10, true, "hello", 11);
 document.write(arr);

2.省略new关键字创建数组

var arr = Array(10, true, "hello", 22);
document.write(arr);

3.字面量赋值

var arr = [10, true, "hello", 33];
document.write(arr);

【注】前两种方式,若传入参数只有一个,且为number时,这个数字表示声明的数组的长度,而不是存放的数据。

var arr = new Array(10);

数组的长度

arr.length

var arr = new Array(10, true, "hello", 11);
document.write(arr + "<br/>");
// 获取数组的长度。
document.write(arr.length);

数组的下标

从0开始,数据在数组中的序号。最大值为length-1.

访问数组元素

访问数组元素,需要通过下标去访问。
格式:数组变量名[下标]

var arr = new Array(10, true, "hello", 11);
document.write(arr + "<br/>");
document.write(arr[2]);

数组的遍历 (循环)

0~length-1

两种循环遍历方式:
1.普通的for循环。

var arr = new Array(10, true, "hello", 11);
for (var i = 0; i <= arr.length - 1; i++) {
     document.write(arr[i] + "   ");
}

2.for…in 循环 (快速遍历法/快速枚举法)
格式:
for (var key in 数组变量名) {

}

var arr = new Array(10, true, "hello", 11);
for (var i in arr) {
    document.write(arr[i] + "   ");
}

区别:
1.for in不需要每次都判断,效率更高
2.for in若在遍历过程中,数组发生了变化,会出现问题,不安全。

数组方法

push()

  • 功能:给数组的末尾添加元素
  • 格式:数组名.push(参数…)
  • 返回值:插入元素后的数组长度
       var arr = [1, 2, "3", true, 5];
        document.write(arr + "<br/>");
        var num = arr.push(7, 8);
        document.write(arr + "<br/>");
        document.write(num);

pop()

  • 功能:在数组的末尾取下一个元素
  • 格式:数组名.pop()
  • 返回值:取下的元素。
        var arr = [1, 2, "3", true, 5];
        document.write(arr + "<br/>");
        var num = arr.pop();
        document.write(arr + "<br/>");
        document.write(num);

unshift()

  • 功能:从数组的头部添加元素
  • 格式:数组名.unshift(参数…)
  • 返回值:插入元素后的数组长度
        var arr = [1, 2, "3", true, 5];
        document.write(arr + "<br/>");
        var num = arr.unshift(9);
        document.write(arr + "<br/>");
        document.write("<br/>")
        document.write(num);

shift()

  • 功能:从数组的头部取下一个元素
  • 格式:数组名.shift()
  • 返回值:取下的元素。
        var arr = [1, 2, "3", true, 5];
        document.write(arr + "<br/>");
        var num = arr.shift();
        document.write(arr + "<br/>");
        document.write(num);

concat()

  • 功能:合并数组。
  • 格式:数组名.concat(数组);
    1.copy原数组,生成新数组。
    2.将输入的数组中的元素单独拆分出来,添加到新数组中。
        var arr = [1, 2, "3", true, 5];
        document.write(arr + "<br/>");
        var arr2 = [8, 9];
        var newArr = arr.concat(arr2);
        document.write(arr + "<br/>");
        document.write(newArr);

slice()

  • 功能:获取当前数组指定区域的元素,生成新数组。
  • 格式:数组名.slice(start,end) 含头不含尾
    1.start:开始位置的下标
    2.end:结束位置的下标
    3.返回值:新数组,原数组不变。
        var arr = [1, 2, "3", true, 5];
        document.write(arr + "<br/>");
        var newArr = arr.slice(1, 3);
        document.write(arr + "<br/>");
        document.write(newArr);

splice()

截取

  • 格式:数组.splice(start,length,数据…)
  • 返回值:截取的元素
  • 参数:
    1.start:开始截取的位置
    2.length:截取的长度
    3.第三个参数开始:在start位置开始,插入新元素。

对数组元素的

  • 新增
    arr.splice(4,0,“9”);
        var arr = [1, 2, "3", true, 5, 6, 7];
        document.write(arr + "<br/>");
        var newArr = arr.splice(4, 0, "9");
        document.write(arr + "<br/>");
        document.write(newArr);
  • 修改
    arr.splice(2,1,“9”);
        var arr = [1, 2, "3", true, 5, 6, 7];
        document.write(arr + "<br/>");
        var newArr = arr.splice(2, 1, "9");
        document.write(arr + "<br/>");
        document.write(newArr);
  • 删除
    arr.splice(2,1);
        var arr = [1, 2, "3", true, 5, 6, 7];
        document.write(arr + "<br/>");
        var newArr = arr.splice(2, 1);
        document.write(arr + "<br/>");
        document.write(newArr);

join()

  • 格式:数组.join(字符串);
  • 功能:将数组中元素用指定的字符串拼接
  • 返回值:拼接好的字符串
        var arr = [1, 2, "3", true, 5];
        document.write(arr + "<br/>");
        var newArr = arr.join("~");
        document.write(newArr);

reverse()

  • 功能:将数组元素反转。
  • 格式:数组.reverse();
  • 该方法会修改原数组。
        var arr = [1, 2, "3", true, 5];
        document.write(arr + "<br/>");
        var newArr = arr.reverse();
        document.write(arr + "<br/>");
        document.write(newArr);

sort()

对数组中的元素进行排序

        var arr = [10, 1, 52, 25, 34];
        document.write(arr + "<br/>");
        var newArr = arr.sort();
        document.write(arr + "<br/>");
        document.write(newArr);

ES5新增常见方法

indexof()

  • 功能:在数组中查找第一次出现元素的下标。
  • 格式:数组.index(item,start);
  • 参数:
    item:要查找的元素
    start:开始查找的位置
  • 返回值:查找到的元素下标,若未查到,则返回-1。
        var arr = [10, 1, 52, 25, 34, 52];
        document.write(arr + "<br/>");
        var index1 = arr.indexOf(52);
        var index2 = arr.indexOf(52, 3);
        var index3 = arr.indexOf(5);
        document.write(index1 + "<br/>");
        document.write(index2 + "<br/>");
        document.write(index3);

forEach()

  • 格式:数组.forEach(function(item,index,arr)){

          }
    
  • 参数:
    item:当前遍历的元素,
    index:当前遍历元素的下标
    arr:数组

   var arr = [10, 12, 52, 25, 34, 52];
   document.write(arr + "<br/>");
   arr.forEach(function(item, index, arr) {
        document.write("元素:" + item + " 下标为:" + index + "<br/>");
        });

二维数组

二维数组:数组中的元素为数组是,该数组被称为二维数组。
eg:

        var arr = new Array([5, 6, 9], [4, 2, 3]);
        document.write(arr + "<br/>");
        document.write(arr[1][1
        var arr = new Array(["韩信", 20, "打野"], ["鲁班", 9, "射手"], ["不知火舞", 24, "法师"]);
        document.write(arr + "<br/>");
        document.write(arr[1][2])

数组的排序

sort

sort:按照Unicode编码比较,类似字符串的比较方式。

        var arr = [1, 11, 15, 2, 23];
        arr.sort(function(value1, value2) {
            // 从小到大
            return value1 - value2;
            // 从大到小。
            // return value2 - value1;
        });
        document.write("从小到大排序:" + arr + "<br/>");
        // document.write("从大到小排序:" + arr + "<br/>");

冒泡排序

规则:从左到右,数组中相邻的两个元素进行比较。将较大(较小)的数放在后面。

规律:

  • 每一轮都可以找出一个最大(最小)值,放在正确的位置上。
  • 比较的轮次:数组的长度-1
  • 每一轮比较的次数:数组长度-当前的轮次

选择排序

规则:选出一个位置,让这个位置上的数与后面的数比较,如果大于(小于)后面的数,则交换位置。然后对该位置进行下一轮比较。

规律:

  • 每一轮,在当前位置找到正确的值。
  • 比较的轮次:数组的长度-1
  • 每一轮比较的次数:数组长度-当前的轮次

区别:
冒泡排序是比较相邻的两个数。而选择是按照位置比较,不一定相邻。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值