数组
- 数组是大多数语言中最常见的一种数据结构,它是一个有序的值列表
创建数组的方式
- 创建数组的方式大致可以分为两种:字面量创建数据和使用构造函数创建数组。示例如下:
1.字面量创建数组
let arr =[ ];
2.构造函数创建数组
let arr = new Array();
无论以什么样的方式创建的数组,它的数据类型始终是Object - 数组的赋值
给数组赋值的方法也非常简单,不过可以分为声明的时候就赋值和直接赋值
1.先声明再赋值
let arr=[]; arr[0]=1; arr[1]=2;
2.声明时直接赋值
let arr=[1,2,3,4,5];
数组的下标是从0开始的,可以把数组看成是一个指针,按下标查看元素就相当于看偏移量。
如果访问的下标没有给数组进行赋值返回的值是undefined
进行补充。
由于JavaScript是门动态的语言,所以JavaScript的数组可以存放任意类型的数据类型。 - 访问数组中的元素
通过数组的下标,直接访问存储在数组中相应位置的参数。如下:
let arr=[1,2,3,4,5] console.log(arr[0])//1
除了这种常规的访问方式,还可以使用变量的方式进行访问。如下:
let arr=[1,2,3,4,5]
let i = 0;
console.log(arr[i])//1
- 删除元素
我们可以使用delete运算符来删除数组中的某一个元素。如下:
let arr = [1,2,3,4,5]
delete arr[2];
删除数组中的第三个元素 - 结构数组
所谓结构,就是将一个复杂类型的数据进行分解为一个普通类型数据
let arr=[1,2,3]
let [a,b,c]=arr;
console.log(a,b,c)
1,2,3
如果不想要结构的元素可以使用逗号来跳过
let arr=[1,2,3]
let [a,,c]=arr;
console.log(a,,c)
1,3
数组的相关方法
添加和删除方法
数组可以表现得像栈(是一种LIFO(Last-In-First-Out)数据结构,特点是先进后出)一样。
js中专门提供了push()
和pop()
方法,用来实现类似栈的行为。
let arr=[];
let i =arr.push('one','two');
console.log(arr)//['one','two'];
console.log(i)//2
let j = arr.pop();
console.log(arr)//['one']
console.log(j)//two
push()
方法推入元素的时候是从右往左推入
let arr=[];
let i =arr.push('one','two');
//只有一个入口
// -------------
// | one two
// -------------
队列方法的特点是先进先出FIFO,因为有两个出口。
在js中提供了shift()
方法,该方法可以去除数组左边的第一个元素并且返回该元素。
利用shift()
和push()
方法就可以实现从右往左的队列。
//从右往左的队列
let arr=[];
arr.push(1,2,3);
let item=arr.shift();
console.log(item); //1
console.log(arr)//2,3
如果要实现从右往左的队列,可以使用unshift()
方法和pop()
方法的配合。unshift()
方法的作用是在数组开头推入一个元素。
//从左往右的队列
let arr=[];
arr.push(1,2,3);
let item=arr.pop();
console.log(item); //3
console.log(arr)//1,2
总结:
push()
和pop()
可以算是一组方法,作用分别是在数组的尾部推入和删除元素。而unshift()
和shift()
就相反,作用分别是在数组的头部推入和删除元素。
推入的时候可以一次性推入多个元素,返回的是一个新数组的长度。删除则只能删除一个,返回的是被删除的那个元素。
操作方法
操作方法里面介绍三种,分别是concat()
,slice()
和splice()
- concat()
concat()
方法是先创建当前数组的一个副本,然后将收到的参数添加到副本的末尾,最后返回新构建的数组,而原来的数组不会被改变
let arr = [1,2,3];
let arr2=arr.concat("one","two");
console.log(arr)//[1,2,3];
console.log(1,2,3,"one","two");
- slice()
slice()
可以接收一个或者两个参数,代表返回项的起始和结束位置。
1个参数:代表起始位置,返回从指定的起始位置到数组末尾的所有项目。
2个参数:代表从指定的起始位置到指定的末尾位置之间的项,但是不包含结束位置的项目。
slice()
方法不会影响到原始数组
let arr=[1,2,3,4,5];
//一个参数
let i=arr.slice(1);
console.log(i)//[2,3,4,5]
console.log(arr)//[1,2,3,4,5];
//两个参数
let j=arr.slice(1,3);
console.log(j)//[2,3]
console.log(arr)//[1,2,3,4,5];
如果传入的是负数,则用数组长度加上该数来确定相应的位置
let arr=[1,2,3,4,5];
//一个参数
let i=arr.slice(-1);//等价于4
console.log(i)//[2,3,4,5]
console.log(arr)//[1,2,3,4,5];
//两个参数
let j=arr.slice(-1,-3);//等价于4,2
console.log(j)//[undifind,undifind];
console.log(arr)//[1,2,3,4,5];
- splice()
splice()
这个方法,可以对数组进行三种操作:删除、插入和替换相当于是增删改操作都可以用这个方法来实现。
**删除:**可以删除任意数量的元素,只需要指定两个参数:参数的第一项位置和要删除的个数。
let arr=[,1,2,3,4,5,6,7,8,9,10];
//从下标为3的元素开始删除,删除5个元素
//将删除的元素返回给i
let i = arr.splice(3,5)
console.log(i)//[4,5,6,7,8]
console.log(arr)//[1,2,3,9,10]
**插入:**可以向任意位置插入任意数量的元素,只需要提供三个参数:起始位置,0(要删除的项目),要插入的项目。
let arr=[,1,2,3,4,5,6,7,8,9,10];
//从下标为3的元素之前开始插入
let i = arr.splice(3,0,"one","two");
console.log(i)//[]
console.log(arr)//[1,2,3,"one","two",4,5,6,7,8,9,10]
**替换:**替换的原理在于插入的时候同时进行删除,这样就实现了替换功能。
let arr=[,1,2,3,4,5,6,7,8,9,10];
//从下标为2的元素之前开始插入
let i = arr.splice(3,0,"one");
console.log(i)//[]
console.log(arr)//[1,2,3,"one",4,5,6,7,8,9,10]
数组的排序
排序涉及到两个方法:reverse()
和sort()
reverse
用于反转数组项的顺序,使用该方法会改变原来数组的顺序
sort()
是按照升序排列数组的每一项,但是使用该方法排序时首先会调用每个元素的toString()
转型方法,然后比较得到字符串。即使都是数值,该方法比较的也是字符串
位置方法
JavaScript提供了两个位置方法:indexOf()
和lastIndexOf()
这两个方法都接收两个参数,要查找的项目和查找的起点位置索引。区别在于一个是从数组开头开始找,一个是从数组末尾开始找。如果没有找到就返回-1。
还需要注意的是,这两个方法查找时使用的是全等进行比较
includes()用于查看数组里面是否包含某个元素,包含返回true,否则返回false
字符串
- 使用双引号和单引号包含任意长度的文本称之为字符串
访问特定字符
有两个访问字符串特定字符的方法,分别是charAt()
和charCodeAt()
- charAt()
接收一个数字参数,找到对应下标的字符是什么。
- charCodeAt()
接收一个数字参数,找到对应下标的字符编码是什么。
fromCharCode()
这个方法基本上和charCodeAt()
执行的是相反的操作。
字符串操作方法
concat()
用于将一个或多个字符拼接起来,返回拼接得到的新字符串。
原字符串不会产生改变,拼接后的字符串以返回值的方式返回。
虽然concat()
可以用于拼接字符串,但是还是使用+
运算符来拼接字符串的方式更加简便,使用的情况更多一些。
slice()
和数组的slice()
方法相似,接收一个或两个参数,截取字符串。
substr()
方法在字符串中抽取从开始下标开始的指定数目的字符,效果和slice()
方法基本一样。但是还是有一定的区别,区别就在于第二个参数,如下:
substring()
方法用于提取字符串中介于两个指定下标之间的字符。和前面的方法也是非常相似,但是还是有一些不同之处,如下:
在上面的示例中,传入两个参数的时候,好像substring()
方法和slice()
方法效果是一样的,那么区别在什么地方呢?
区别就在于参数为负数的时候,如下:
字符串位置方法
indexOf()
和lastIndexOf()
这两个方法都是从一个字符串中搜索给定的子字符串,然后返回子字符串的位置,没有找到就是返回-1,两个方法的区别就在于一个是从前面开始找,一个是从后面开始找。
字符串对象中还存在一个和indexOf()
方法很类似的方法,为search()
方法。该方法也是用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。如果没有找到任何匹配的子串,则返回-1。
示例如下:
除了传入子字符串,还可以传入一个正则表达式,如下:
查找是否包含字符
includes()
方法用于查看是否包含某个字符,如果包含返回true,否则返回false。
检测开始字符和结束字符
startsWith()
和endsWith()
方法分别用于检测开始字符和结束字符。
let str="Hello World";
console.log(str.startsWith("H"))//ture
console.log(str.startsWith("z"))//false
去除字符串空白方法
trim()
方法用于去除字符串两端空表,这个方法在表单验证里面经常使用。它会创建一个字符串副本,和三处前置以及后缀的所有空格。
除此之外,还要trimLeft()
和trimRight()
方法,分别删除左边或者末尾的空格
重复字符串
repeat()
方法接收一个参数,为字符串重复的次数。返回值为字符串重复次树的新字符串。
字符串大小写转换方法
有四个方法toLowerCase()
、toLocaleLowerCase()
、toUpperCase()
、toLocaleUpperCase()
。
一般用的比较多的是toUpperCase()
、toLocaleUpperCase()
。
示例如下: