博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript系列教程(九):数组
阅读量:5248 次
发布时间:2019-06-14

本文共 4963 字,大约阅读时间需要 16 分钟。

一、数组的概念

  • Array数组是数据的有序列表;
  • 数组中的每一个值叫做元素。每一个元素都有自己的位置,这个位置叫做索引。索引是从0开始的;
  • ECMAScript数组是没有类型的;
  • ECMAScript同一个数组中可以存储不同类型的数据;
  • ECMAScript语言中数组的长度是可以动态变化的;
  • Array是ECMAScript中常用的引用类型之一;

二、数组的创建

1.字面量法

var arr = [];//创建一个空数组var arr2 = [1,"abc",true,3.14];

2.构造函数法创建数组

var arr3 = Array();//创建了一个空数组console.log("arr3  "+arr3.length);var arr4 = new Array(20);//创建了一个容量为20的数组console.log("arr4  "+arr4.length);var arr5 = new Array(1,2,3,4);//创建了一个容量为4的数组console.log("arr5  "+arr5.length);

三、数组元素的读写--索引法

数组的索引是从0开始,也就是说索引0代表第一个元素。

1.读取元素

var arr = [1,'abcd',true,20.5,'123'];var a1 = arr[1];console.log(a1);//提取数组第一个元素console.log(arr[arr.length - 1]);//提取数组最后一个元素//数组越界console.log(arr[5]);//undefined//打印数组中每一个元素//数组的遍历for (var i = 0; i < arr.length; i++) {    console.log(arr[i]);}

注:当使用索引访问不存在的元素的时候,称之为数组越界,值为undefined

2.修改元素

var arr = [1,'abcd',true,20.5,'123'];//修改数组的某个元素arr[0] = 10;arr[1] = 20;console.log(arr);

3.添加元素

var arr1 = [];//向数组中添加元素arr1[0] = 'abc';console.log(arr1);arr[5] = 'hello';console.log(arr);var arr2 = [];//循环向数组中添加元素for (var i = 0; i < 100; i++) {    arr2[i] = i+1;}console.log(arr2);

注:数组中没有这个元素就是添加,有就是修改

四、获取数组的长度

数组的length属性非常有特点:他不是只读的。可以通过数组的length属性向数组的末尾扩大数组的容量,或者从数组末尾移除数组元素。

var arr = [1,2,3,4,5,6,7,8,9,10];//1.获取数组的长度console.log("数组的长度"+arr.length);//2.js的数组,可以通过修改length的值,来修改数组的容量arr.length = 8;console.log(arr);arr.length = 20;console.log(arr);

五、数组常用的方法

1、arr.push(v1,v2...)

描述:向数组末尾添加一个或者多个数组元素
参数:需要添加的数组元素
返回值:数组的长度
注意:原数组改变

var arr = [1,2,3,4,5];console.log( arr.push("abc",11,22,33) );//9console.log(arr);//[1, 2, 3, 4, 5, "abc", 11, 22, 33]

2、arr.pop()

描述:从数组的末尾删除一个数组元素
返回值:返回删除的元素
注意:原数组改变

console.log(arr.pop() );//9console.log(arr);//[1, 2, 3, 4, 5, "abc", 11, 22]

3、arr.unshift(v1,v2...)

描述:向数组的头部插入元素
参数:需要插入的值
返回值:数组的长度
注意:原数组改变

arr.unshift(100,200,300);console.log(arr);//[100, 200, 300,1, 2, 3, 4, 5, "abc", 11, 22]

4、arr.shift()

描述:删除数组的第一个元素
参数:删除掉的元素
注意:原数组改变

arr.shift() console.log(arr);//[200, 300,1, 2, 3, 4, 5, "abc", 11, 22]

5、arr.join("+")

描述:将数组的值连接成字符串
参数:字符串
返回值:拼接成的字符串

console.log(arr.join('*'));//200*300*1*2*3*4*5*abc*11*22

6、arr.reverse()

描述:将数组的数组元素倒置
返回值:返回原来的数组
注意:元数组改变

console.log( arr.reverse() );//[22, 11, "abc", 5, 4, 3, 2, 1, 300, 200]

7、arr.concat(v1,v2,v3...)

描述:创建一个新数组,新数组的元素是arr数组的全部元素,再加上参数中的元素
参数:可以使数组元素,也可以使数组
返回值:新数组

console.log( arr.concat(true,false,["aa","bb"]) );console.log(arr);//[22, 11, "abc", 5, 4, 3, 2, 1, 300, 200, true, false, "aa", "bb"]

8、arr.slice(start,end)

描述:返回数组中一部分
参数:开始的位置,结束的位置
返回值:数组的一部分
注意:start的值必须大于1并且不能小于end的值

console.log( arr.slice(0,58) );console.log(arr);//[22, 11, "abc", 5, 4, 3, 2, 1, 300, 200]

9、arr.splice(index,howmany,v1,v2...)

描述:向数组中添加元素或者从数组中删除元素
参数:index--必需,规定添加或者删除元素的地方。赋值表示从数组末尾开始
howmany--必需,要删除项目的个数,如果值为0,则不会删除元素
v1--可选,向数组中添加新的项目
返回值:改变之后的数组

var arr2 = [0.1,0.2,0.3];//1.向0.2之前添加一个0.05arr2.splice(1,0,0.05);console.log(arr2);//[0.1, 0.05, 0.2, 0.3]//2.删除掉0.05arr2.splice(1,1,"abc","abd","cbd");console.log(arr2);//[0.1, "abc", "abd", "cbd", 0.2, 0.3]//3.删除多个数组元素arr2.splice(1,3);console.log(arr2);//[0.1, 0.2, 0.3]

10、indexOf(v1) 

          描述:从数组头部查找v1,找到的话返回索引
          参数:要查找的数值
          返回值:索引,没有找到返回-1

var arr3 = [100,200,200,300,200,400,500,100,200];console.log( arr3.indexOf(200));//1

11、lastIndexOf(v2) 

          描述:从数组尾部查找v1,找到的话返回索引
          参数:要查找的数值
          返回值:索引,没有找到返回-1

var arr3 = [100,200,200,300,200,400,500,100,200];console.log( arr3.lastIndexOf(200) );//8

六、排序

冒泡排序 (Bubble Sort)

  • 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  • 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一轮,最后的元素应该会是最大的数。
  • 针对所有的元素重复以上的步骤,除了最后一个。
  • 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

//数组中有10个元素都是数字,从小到大排序    var arr = [2,4,3,6,1];    /*        选择排序:                每一个元素和后面所有的元素比较,把最小的放在前面                 *  原数组:2 4 3 6 1     *       第一层循环: 遍历数组     *          第一次:arr[0] = 2     *              第二层循环:     *                  第一次:2 4 ---- 不动     *                  第二次:2 3 ---- 不动     *                  第三次:2 6 ----- 不动     *                  第四次:2 1 ----- 2 和1交换位置  1 4 3 6 2     *          第二次:arr[1] = 4     *              第二层循环:     *                  第一次:4 3 --- 4 和3交换位置  1 3 4 6 2     *                  第二次:3 6 ---- 不动     *                  第三次:3 2 ---- 3和2交换位置 1 2 4 6 3     *                       *          第三次:arr[2] = 4       *              第二层循环:     *                  第一次:4 6 ---- 不动     *                  第二次:4 3 ---- 4和3交换位置 1 2 3 6 4     *          第四次:arr[3] = 6     *              第二层循环:     *                  第一次:6 4 --- 6和4交换位置 1 2 3 4 6     *                   * */    //第一层循环    for (var i = 0; i < arr.length - 1; i++) {                //第二层循环         for (var j = i + 1; j < arr.length; j++) {            //1 --- 5            //当前第一层循环的元素arr[i]和后面的每一个元素比较            if(arr[i] > arr[j]){                //如果比后面的值大,交换两个元素的值,小值在前面                var tmp = arr[i];                arr[i] = arr[j];                arr[j] = tmp;            }        }    }

转载于:https://www.cnblogs.com/codingplayer/p/7260812.html

你可能感兴趣的文章
WinForm中键盘按键问题
查看>>
WinForm通过操作注册表实现限制软件使用次数的方法
查看>>
jdk环境变量配置
查看>>
我的浪费时间的行为
查看>>
sql server实现简繁转换
查看>>
java集合类源码学习一
查看>>
序列化和反序列化及Protobuf 基本使用
查看>>
Event 对象
查看>>
BFS模板
查看>>
css 的基础样式--border--padding--margin
查看>>
K-Means
查看>>
Wince 6.0适用 .NET 使用HttpRequest的Post上传文件,服务端的Web API接收Post上传上来的文件 代码...
查看>>
RabbitMQ 应用
查看>>
Git详解之三 Git分支
查看>>
标准C++类std::string的内存共享和Copy-On-Write技术
查看>>
「POI2011 R1」Conspiracy
查看>>
xhtmlConformance与xhtml脚本呈现
查看>>
[C++]栈区(栈)与堆区(类链表)[转/摘]
查看>>
1073 多选题常见计分法
查看>>
计算机基础的小贴士(1)
查看>>