数组操作方法汇总
1. 转字符串方法
toString
: 数组转字符串
join
: 数组转字符串
split
: 字符串转数组
以上方法会生成新数组,不影响原数据
// toString
let a = [1,2,3,'name','bbb'];
a.toString()//===> "1,2,3,name,bbb"
let a = [1,2,3,'name',{a:[123]}];
a.toString()//===> "1,2,3,name,[object Object]"
let a = [1,2,3,'name',[1,2,[4,5,6]]];
a.toString()//===>"1,2,3,name,1,2,4,5,6"
// `join`
let a = [1,2,3,'name','bbb'];
a.join()//===> "1,2,3,name,bbb"
let a = [1,2,3,'name',{a:[123]}];
a.join()//===> "1,2,3,name,[object Object]"
let a = [1,2,3,'name',[1,2,[4,5,6]]];
a.join()//===>"1,2,3,name,1,2,4,5,6"
// split
let a = 'yellow pink red black white';
a.split(' ')//===>["yellow", "pink", "red", "black", "white"]
2.堆栈方法
push
: 在末尾添加数组元素(返回添加后的数组长度)
unshift
: 在头部添加数组元素(返回添加后的数组长度) 可添加多个
pop
: 在尾部删除元素,无参数(返回删除的元素)
shift
: 在头部删除一个元素,无参数(返回删除的元素)
以上方法均影响原数组
// 添加
let b = [1,2,3];
b.push(4)//===> 返回4, b = [1, 2, 3, 4]
b.unshift(0)//===>返回5,b = [0, 1, 2, 3, 4]
b.unshift(7,8,9)//===>返回8,b = [7, 8, 9, 0, 1, 2, 3, 4]
// 删除
let b = ['yellow','pink','black'];
b.pop()//===> 返回'black', b = ['yellow','pink']
b.shift()//===>返回'yellow',b = ['pink']
3.排序方法
reverse
: 倒序排列
sort
: 正/倒序排序/随机排序
以上方法均影响原数组
// 倒序排序
let c = [1,2,3,4,5,6];
c.reverse()//===> [6, 5, 4, 3, 2, 1]
let d = ['apple','peach','orange']
d.reverse()//===> ["orange", "peach", "apple"]
// sort方法可实现正序和倒叙
// 正序:默认,无参数
// 倒叙:参数为function(a,b){ return b-a }
let c = [5,7,1,3,9,5];
c.sort()//===> [1, 3, 5, 5, 7, 9]
c.sort((a,b)=> b-a)//===>[9, 7, 5, 5, 3, 1]
// sort实现随机排序
let c = [1,2,3,4,5,6];
function compate(){
return Math.random() - 0.5
}
c.sort(compate)//===>[4, 5, 6, 3, 1, 2]
4.数组拼接
concat
: 数组拼接,数组1拼接数组2,数组1在前,数组2在后
[...]
: 扩展运算符,三点表达式
以上方法会生成新数组,不影响原数组
// concat
let e = [1,2,3]
let f = [4,5,6]
e.concat(f)//===>[1, 2, 3, 4, 5, 6]
f.concat(e)//===>[4, 5, 6, 1, 2, 3]
console.log(e)//===>(3) [1, 2, 3]
console.log(f)//===>(3) [4, 5, 6]
e.concat(4,5)//===>[1, 2, 3, 4, 5]
e.concat([4,5])//===>[1, 2, 3, 4, 5]
e.concat([4,[5,6]])//===>[1, 2, 3, 4, [5,6]]
e.concat([4,[5,6,[7,8]]])//===>[1, 2, 3, 4, [5,6,[7,8]]]
// [...]
[...f,5,6]//===>[4, 5, 6, 5, 6]
[...f,5,[4,5]]//===>[4, 5, 6, 5,[4,5]]
5.删改方法
slice
: 截取数组**[开始,结束)**, 左闭右开,还可以将类数组转换为数组,不影响原数组
splice
: 裁减/替换或新增数组元素(start, deletCount,…items),结合三个参数用法实现不同功能,影响原数组
// 返回新数组,不影响原数组
// array.slice(start, end)
let k = [1,2,3,4,5,6,7,8,9]
k.splice(3)//===>[4, 5, 6, 7, 8, 9]
k.slice(3,6)//===>[4, 5, 6]
// 当参数为负数时,由后往前截取
k.slice(-2)//==>[8, 9]
k.slice(-4,-1)//===>[6, 7, 8]
k.slice(4,-1)//===>[5, 6, 7, 8]
// 总结起来就是,正数从开头开始正序截取,负数从结尾开始正序截取,如果计算得出start和end反了,则输出空数组[]
// 类数组转换为数组
let str = '1234556789'
Array.prototype.slice.call(str)//===>["1", "2", "3", "4", "5", "5", "6", "7", "8", "9"]
function arrTest(){
console.log(Array.prototype.slice.apply(arguments))
}
arrTest(3,4,6,{name:'a'})//===>[3, 4, 6, {name:'a'}]
// splice 返回删除元素组成的数组,会影响原数组,原数组为被裁减后的数组
// array.slice(start, deletCount,...items)
// 第一个参数值为裁减开始下标,第二个参数为裁减个数,第三个参数为替换裁减区域的参数.
let k = [1,2,3,4,5,6,7,8,9]
k.splice(1,2)//===>[2, 3]
console.log(k)//===>[1, 4, 5, 6, 7, 8, 9]
k.splice(1,2,0,0,0)//===>[4, 5]
console.log(k)//===>[1, 0, 0, 0, 6, 7, 8, 9]
// 第一个参数也可以是负数
k.splice(-2)//===>[8, 9]
console.log(k)//===>[1, 0, 0, 0, 6, 7]
k.splice(-2,2,9,9,9,9,9,9)//===>[6, 7]
console.log(k)//===>[1, 0, 0, 0, 9, 9, 9, 9, 9, 9]
6.查找方法
indexOf
: 查找数组元素,返回第一个找到的元素下标,找不到返回-1
lastIndexOf
: 查找数组元素,返回最后一个找到的元素下标,找不到返回-1
includes
: 查找数组是否包含某一元素,包含则返回true,不包含返回false
find
: 查找满足函数条件的第一个值,找不到返回undefined
findIndex
: 查找满足函数条件的第一个值得下标,找不到返回-1
// indeXOf/lastIndexOf/includes
let q = [1,2,3,4,5,7,6,6,8]
q.indexOf(6)//===>6
q.lastIndexOf(6)//===>7
q.indexOf(11)//===>-1
q.lastIndexOf(11)//===>11
q.includes(6)//===>true
q.includes(11)//===>false
// find/findIndex
q.find(function(num){ return num>5 })//===>7
q.findIndex(function(num){ return num>5 })//===>5
q.find(function(num){ return num>10 })//===>undefined
q.findIndex(function(num){ return num>10 })//===>-1
7.数组类的静态方法
静态方法只能通过类去调用
Array.of
: 将一数值转化为数组
Array.from
: 将类数组转化为数组
// Array.of
Array.of(1)//===>[1]
Array.of(1,2,3,4,4,5)//===>[1, 2, 3, 4, 4, 5]
// Array.from
Array.from('182578154')//===>["1", "8", "2", "5", "7", "8", "1", "5", "4"]
Array.from('你好啊')//===>["你", "好", "啊"]
8.数组填充
fill
: 填充数组 影响原数组
//array.fill(value, start, end)
let kk = [1,2,3,4,4,5,5]
kk.fill(9,1,3)//===>[1, 9, 9, 4, 4, 5, 5]
console.log(kk)//===>[1, 9, 9, 4, 4, 5, 5]
---------题外话--------
类数组转数组方法
- slice方法
Array.prototype.slice.call(str)
- 三点表达式
[...str]
- Array.from方法
Array.from(str)
创建数组的方法
- let a = []
- let a = new Array()
- let a = Array(3) // 创建长度为3的数组
- let a = Array(1,2,3) // 创建内容为[1,2,3]的数组
- let a = Array.of(1,2,3) // 创建内容为[1,2,3]的数组
- let a = Array.from(‘1234’) //类数组转数组