数组方法

操作数组的方法

delete

​ 可以借助delete运算符 能删除数组元素,因为Array也是对象,数组元素实际上与对象属性是一样。

1
2
3
4
5
var a = [1,2,3,'hello',4,5];//定义数组
delete a[3];// 删除指定下标的元素
console.log(a);// [1, 2, 3, empty, 4, 5]
// delete只能删除元素的值,而不是元素,因此delete并没有改变数组的长度
// 删除的那个元素 他的依然存在 只是没有值 (empty)

push

push()方法能够把一个或多个元素添加到数组的最后(尾部),然后返回添加后的数组长度

1
2
3
4
5
var a = [] // 定义数组 模拟空栈
a.push(1);// 进栈 栈值为[1] 此时该方法返回值为1
a.push(2,3,4);// 进栈 栈值为[2,3,4]
console.log(a) // [1,2,3,4]
// push 是按参数的顺序依次添加到数组的尾部,所以他是原来数组结构的基础上进行操作,而不是在新创建的数组上执行操作。 在实际开发中,用户可以利用这个特性,动态改变数组的值

pop

pop()方法操作刚好相反,它能够删除数组中最后一个元素,并返回这个元素的值

1
2
3
4
var arr = [1,2,3,4,5]
arr.pop();//删除最后一个元素
console.log(arr);// [1,2,3,4]
// pop()方法 当删除最后一个元素后,会自动把数组长度减1,如果数组为空,则pop()不会改变数组结构 仅返回undefined

unshift

unshift()方法是在数组头部执行操作,可以包含多个参数,并把这些参数一次性插入数组的头部,第一个参数为数组新的元素0,第二个参数为新的元素1,以此类推。这与一次次插入元素是不同的

1
2
3
var arr = [0]// 定义数组
arr.unshift(1,2)// 同时增加两个参数
console.log(arr);// 返回 [1,2,0]

如果分开操作,结果就不同了

1
2
3
4
var arr = [0]
arr.unshift(1)
arr.unshift(2)
console.log(arr)// 返回[2,1,0]

shift

shift()方法它是将数组第一个元素移除,并返回该元素的值,然后将余下所有元素往前移一位,以填补数组头部的空缺。如果数组为空,shift()将不进行任何操作,返回undefined

1
2
3
var arr = [0,1,2]
arr.shift()
console.log(arr)//[1,2]

【温馨提示】unshift 和 shift 方法也是在原数组上进行修改,而不是创建新数组

示例 pop()和unshift()配合使用 可以模拟队列数据结构的操作模式 即先出先进

1
2
3
4
5
6
7
8
9
10
var arr = [1,2,3,4,5]
for(var k in arr){// 遍历数组
var tepm = arr.pop()//先出 把出去的元素值暂时保存
console.log(tepm);// 先进 把出去的元素值放大十倍,再进入
// console.log(arr);

arr.unshift(tepm*10);

}
console.log(arr);// [10,20,30,40,50]

push 与 shift 结合使用 模拟队列数据结构的操作模式 即 先进先出

1
2
3
4
5
6
7
var a = [1,2,3,4]
for(var k in a){
var t = a.shift()
a.push(t*10)

}
console.log(a);//[10,20,30,40]

concat

concat是一个比较特殊的数组元素添加方法 他采用粘接的方式把参数添加到数组中

1
2
3
var arr = [1,2,3,4,5]
var b = arr.concat(6,7,8)
console.log(b);//[1,2,3,4,5,6,7,8]

concat 方法 比较特殊 使用应注意下面几个问题

  1. concat()方法可以跟随多个参数,并把他们作为元素按顺序连接到数组的尾部。如果参数是数组,则concat()方法会把它打散分别作为单独的元素连接到数组的尾部
    1
    2
    3
    4

    var a = [1,2,3,4,5]
    var b = a.concat([1,2,3],[4,5])
    console.log('数组-->',b,'数组长度--->',b.length);//数组-->  [1, 2, 3, 4, 5, 1, 2, 3, 4, 5] 数组长度---> 10

​ 虽然concat()方法能够打散一维数组,但是他不会递归打散参数数组中包含的数组

1
2
3
4
5
var a = [1,2,3,4,5]
var b = a.concat([[1,2],3],[4,5])

console.log('数组-->',b,'数组长度--->',b.length);// 返回长度9 说明参数数组[1,2]没有被打散
//数组--> (9) [1, 2, 3, 4, 5, Array(2), 3, 4, 5]0: 11: 22: 33: 44: 55: (2) [1, 2]6: 37: 48: 5length: 9__proto__: Array(0) 数组长度---> 9
  1. concat()方法将创建并返回一个新数组 而不是在原来数组基础上添加新元素。所以 希望在原数组基础上添加元素,建议使用push 和 unshift 来实现 但是 push和unshift 不能打散参数数组,而是把它作为单数的参数执行添加操作。

##splice

splice()方法是增加和删除多个数组元素的通用方法。这个方法的参数比较复杂,其中第1个参数为操作的起始下标位置,第2个参数指定要删除元素的个数,第3个及后面的所有不定参数为将要插入的元素。

1
2
3
4
5
6
var a = [1,2,3,4,5]
//第1个参数表示从该数组中下标为1 开始
//第2个参数表示删除2个元素
//第3个后面的 就是在删除的位置同时添加元素
a.splice(1,2,3,4,5);
console.log(a);// [1,3,4,5,4,5]
1
2
3
4
5
var a = [1,2,3,4,5]
// 数组的下标是从0开始
//如果只传一个参数 则是从下标 2 开始 删除后面所有
a.splice(2);
console.log(a);//[1,2]
1
2
3
4
var a = [1,2,3,4,5]
// 给两个参数时 就是从下标为 2 开始 删除 只删除2个
a.splice(2,2);
console.log(a);//[1,2,5]

参数取负值问题 如果第一个参数 为负值 则按绝对值从数组右侧开始向左侧定位,如果第2个参数为负值,则被视为0

1
2
3
4

var a = [1,2,3,4,5]
a.splice(-2,-2,2,3);
console.log(a);//[1, 2, 3, 2, 3, 4, 5]

slice

slice()方法与splice()方法功能很相近 但是它能够截取数组中指定区段的元素,并返回这个子数组,该方法包含两个参数,分别指定截取子数组的起始和结束位置的下标。

1
2
3
4
5
6
7
8
9
10
11
12
arr.slice(start,end)
//start 必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。
// end 可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。
//返回值
//返回一个新的数组,包含从 start 到 end (不包括该元素)的 ar 中的元素。

//说明
//请注意,该方法并不会修改数组,而是返回一个子数组。如果想删除数组中的一段元素,应该使用方法 Array.splice()。
//提示和注释
//注释:您可使用负值从数组的尾部选取元素。

//注释:如果 end 未被规定,那么 slice() 方法会选取从 start 到数组结尾的所有元素。

reverse

reverse()方法能够颠倒数组元素的排列顺序 该方法不需要参数

1
2
3
4
var arr = [1,2,3,4,5]
arr.reverse();
console.log(a)//[5,4,3,2,1]
// 注意 该方法是在原数组基础上操作,并不是创建新的数组

sort

sort()方法能够根据一定条件对数组元素进行排序。如果调用sort()方法时没有传递参数。则按字母顺序对数组中的元素进行排序

1
2
3
var a = ['a','e','d','b','c']
a.sort()
console.log(a)//["a", "b", "c", "d", "e"]
  1. 所谓的字母顺序,实际上是根据字母在字符编码表中的顺序进行排序的,每个字符在字符表中都有一个唯一的编号。

  2. 如果元素不是字符串 则sort 方法会试图把数组的元素都转换成字符串,以便进行比较

  3. 在排序时,sort 方法将根据元素值进行逐位比较,而不是根据字符串的个数进行排序,在排序时首先比较每个元素的第一个字符,在第一个字符相同的情况下,在比较第2个字符,以此类推。

1
2
3
4

var a = ['aba','baa','aab']
a.sort()
console.log(a)// ["aab", "aba", "baa"]
  1. 在任何情况下,数组中undefined 的元素都被排列在数组末尾
  2. sort 方法是在原数组基础是那个个进行排序操作 不会创建新的数组

##toString

toString 将数组转换成一个字符串

##toLocaleString

toLocaleString()把数组转换成局部字符串

##join

join()将数组元素连接起来构建一个字符串