JS数组方法

110 阅读10分钟

数组常用方法

总结:

  1. push() 在数组末尾添加一个或多个元素,返回新数组长度
  2. pop() 删除数组最后一个元素,返回被删除的元素
  3. shift() 删除数组第一个元素,返回被删除的元素
  4. unshift() 在数组开头添加一个或多个元素,返回新数组长度
  5. splice() 删除、替换或添加数组元素,返回被删除的元素
  6. fill() 用一个固定值填充数组中的元素,返回填充后的数组
  7. sort() 对数组元素进行排序,返回排序后的数组
  8. reverse() 颠倒数组元素顺序,返回颠倒后的数组
  9. slice() 截取数组的一部分,返回一个新数组
  10. at() 获取指定索引的元素
  11. indexOf() 获取每个元素的索引
  12. lastIndexOf() 获取每个元素的最后一个索引
  13. find() 查找符合条件的第一个元素
  14. findLast() 查找符合条件的最后一个元素
  15. findIndex() 查找符合条件的第一个元素的索引
  16. findLastIndex() 查找符合条件的最后一个元素的索引
  17. includes() 判断数组中是否包含某个元素
  18. every() 判断数组中所有元素是否都满足指定条件
  19. some() 判断数组中是否存在满足指定条件的元素
  20. map() 对数组中的每个元素执行一个函数,返回一个新数组
  21. filter() 返回符合条件的元素组成的新数组
  22. reduce() 对数组中的每个元素执行一个函数(迭代),返回一个值
  23. reduceRight() 从右向左迭代数组中的每个元素,返回一个值
  24. forEach() 对数组中的每个元素执行一个函数
  25. join() 返回一个将数组中元素用指定字符连接起来的字符串
  26. toString() 返回一个将数组中元素用逗号连接起来的字符串
  27. concat() 返回一个将两个或多个数组连接起来的新数组
  28. flat() 返回一个将多维数组展平的新数组
  29. flatMap() 对数组中的每个元素执行一个函数,并将结果展平一层,返回一个新数组
  30. copyWithin() 复制数组的一部分到同一数组中的另一个位置,并返回该数组

数组增删改

let number = [1, 2, 3, 4, 5];

// isArray() 判断一个变量是否为数组,返回布尔值
console.log(Array.isArray(number)); // true
// push 在数组末尾添加元素,并返回新数组的长度
console.log(number.push(6)); // 6
console.log(number); // [1, 2, 3, 4, 5, 6]
console.log(number.push(7, 8)); // 8
console.log(number); // [1, 2, 3, 4, 5, 6, 7, 8]
// unshift 在数组开头添加元素,并返回新数组的长度
console.log(number.unshift(0)); // 9
console.log(number); // [0, 1, 2, 3, 4, 5, 6, 7]

// pop 删除数组末尾元素,并返回被删除的元素
console.log(number.pop());// 8
console.log(number); // [0, 1, 2, 3, 4, 5, 6, 7]
// shift 删除数组开头元素,并返回被删除的元素
console.log(number.shift()); // 0
console.log(number); // [1, 2, 3, 4, 5, 6, 7]

// splice(粘接) 通过删除和增加元素,修改数组,并返回被删除的元素
console.log(number.splice(2, 0, 'a', 'b')); // []
console.log(number); // [1, 2, 'a', 'b', 3, 4, 5, 6, 7]
//从索引2开始,删除0个元素,添加'a'和'b'
console.log(number.splice(2, 2)); // ['a', 'b']
// 从索引2开始,删除2个元素
console.log(number); // [1, 2, 3, 4, 5, 6, 7]
// fill() 用指定值填充原数组中指定位置,并返回填充后的新数组
console.log(number.fill('a', 1, 2)); // [1, 'a', 3, 4, 5, 6, 7]
console.log(number.fill(2, 1, 2)) // [1, 2, 3, 4, 5, 6, 7]

// sort() 对原数组进行排序,并返回一个排序后的新数组
console.log(number.sort()); // [1, 2, 3, 4, 5, 6, 7]
console.log(number.sort((a, b)=>a-b)); // [1, 2, 3, 4, 5, 6, 7]
console.log(number); // [1, 2, 3, 4, 5, 6, 7]
console.log(number.sort((a, b)=>b-a) ); // [7, 6, 5, 4, 3, 2, 1]
console.log(number); // [7, 6, 5, 4, 3, 2, 1]
// reverse() 颠倒原数组中元素顺序,并返回一个颠倒后的新数组
console.log(number.reverse()); // [1, 2, 3, 4, 5, 6, 7]
console.log(number);

数组元素查询

let number = [1, 2, 3, 4, 5];

// 获取数组元素数量
console.log(number.length); // 5
// slice(切片) 截取数组的一部分,返回一个新数组
let number2 = number.slice(1, 3);
console.log(number2); // [2, 3]
console.log(number); // [1, 2, 3, 4, 5]
// at() 返回指定索引位置的元素
console.log(number.at(-1)); // 5
console.log(number.at(1)); // 4
// indexOf() 获取每个元素的索引,如果不存在则返回 -1
console.log(number.indexOf(3)); // 2
console.log(number.indexOf(10)); // -1
// lastIndexof() 返回指定元素最后一次出现的索引,如果不存在则返回 -1
console.log(number.lastIndexOf(3)); // 2
console.log(number.lastIndexOf(6)); // -1
// find() 查找符合条件的第一个元素
console.log(number.find(item=>item>3)); // 4
console.log(number.find(item=>item>10)); // undefined
// findIndex() 返回满足条件的第一个元素的索引,如果不存在则返回 -1
console.log(number.findIndex((item) => item > 2)); // 2
console.log(number.findIndex((item) => item > 6)); // -1
// findLast() 返回满足条件的最后一个元素
console.log(number.findLast(item=>item<3)); // 2
console.log(number.findLast(item=>item<1)); // undefined
// findLastIndex() 返回满足条件的最后一个元素的索引,如果不存在则返回 -1
console.log(number.findLastIndex(item=>item<3)); // 1
console.log(number.findLastIndex(item=>item<1)); // -1
// includes() 判断数组中是否包含某个元素
console.log(number.includes(4)); // true
console.log(number.includes(10)); // false
// every() 判断数组中所有元素是否都满足指定条件
console.log(number.every(item=>item>3)); // false
// some() 判断数组中是否存在满足指定条件的元素
console.log(number.some(item=>item>3)); // true

基于原数组返回新数据

let number = [1, 2, 3, 4, 5];

// map() 对数组中的每个元素执行一个函数,返回一个新数组
console.log(number.map(item=>item*2)); // [2, 4, 6, 8, 10, 12, 14]
// filter() 返回符合条件的元素组成的新数组
console.log(number.filter(item=>item>3)); // [4, 5, 6, 7]
// reduce() 对数组中的每个元素执行一个函数(迭代),返回一个值
console.log(number.reduce((prev, item)=>prev+item)); // 28
// reduceRight() 从右向左迭代数组中的每个元素,返回一个值
console.log(number.reduceRight((prev, item)=>prev+item.toString())); // 7654321
// forEach() 对数组中的每个元素执行一个函数
number.forEach(item=>console.log(item)); // 1 2 3 4 5 6 7

// join() 返回一个将数组中元素用指定字符连接起来的字符串
console.log(number.join('-')); // 1-2-3-4-5-6-7
// toString() 返回一个将数组中元素用逗号连接起来的字符串
console.log(number.toString()); // 1,2,3,4,5,6,7
// concat() 返回一个将两个或多个数组连接起来的新数组
console.log(number.concat(['a','b'])); // [1, 2, 3, 4, 5, 6, 7, 'a', 'b']
// flat() 返回一个将多维数组展平的新数组
let number1 = [1, 2, 3, 4, 5,[6,[7,[8,9]]]];
console.log(number1.flat()); // [1, 2, 3, 4, 5, 6, [7, [8, 9]]]
console.log(number1.flat(2)); // [1, 2, 3, 4, 5, 6, 7, [8, 9]]
console.log(number1.flat(3)); // [1, 2, 3, 4, 5, 6, 7, 8, 9]

基础方法

1.push()

语法:数组.push(数据1,数据2,数据3,...)
作用:把所有参数按照顺序追加到数组末尾位置
返回值:追加以后数组的长度
直接操作数组

2,pop()

语法:arr.pop(数据1,数据2,数据3)
作用:删除数组的最后一个数据
返回值:被删除的数据
直接操作原始数组

3,unshift()

语法:arr.unshift(数据1,数据2,数据3)
作用:从数组最前面插入数据
返回值:插入后的数组长度
直接操作数组

4,shift()

语法:arr.shift()
作用:删除数组最前面的数据
返回值:删除的数据
直接操作数组

ES3.0

5,reverse()

语法:arr.reverse()
作用:反转数组
返回值:反转以后的数组
直接操作数组

6,sort()

arr.sort()---按位排序
返回值:排序好的数组
直接操作数组

7,splice()

arr.splice(开始截取的索引,截取都少个)---第二个参数可以不写,不写代表截取到末尾
arr.splice(开始索引,多少个,替换数据1,替换数据2 ,替换数据3)---从索引位置开始截取n个字符串,截取掉的位置用替换数据填充
返回值:截取出来的数组
直接操作数组

8,concat()

arr.concat(数组1,数组2...)---追加数据
如果参数是数组,那么把数组拆开,里面每一项追加到原数组后面。如果参数是数据,那么直接追加
返回值:追加好的数组
不改变原始数组

9,slice()

arr.slice(开始索引,结束索引)---获取数组里的某些数据
第一个参数不写表示从头,第二个参数可以不写表示到位。参数可以是负整数,表示length+负整数
返回值:一个包含截取数据的新数组
不改变原始数组

10,join()

arr.join('连接符号')----把数组里面的每一个数据使用连接符号连接在一起
不传递参数默认按照逗号连接
返回值:一个连接好的字符串
不改变原始数组

ES5.0

11,indexOf()

arr.indexOf(数据)---正向查看数组里面指定数据的索引
arr.indexOf(数据,开始索引)---从指定索引位置开始向后查找指定数据的索引
返回值:找到该数据,返回该数据的索引;没找到返回-1

12,lastIndexOf()

arr.indexOf(数据)---反向查看数组里面指定数据的索引
arr.indexOf(数据,开始索引)---从指定索引位置开始向前反向查找指定数据的索引
返回值:找到该数据,返回该数据的索引;没找到返回-1

13,forEach()

arr.forEach(function(item,index,arr){})---取代for循环的作用遍历数组
item:数组每一项,index:数组每一项索引,arr:原始数组
没有返回值

14,map()

arr.map(function(item,index,arr){})----映射数组
返回值:一个新的数组,里面是对原属数组每一个数据的操作,和原数组长度一样
不改变原始数组

15,filter()

arr.filter(function(item,index,arr){})---过滤原始数组中的 数据,把满足条件的数据放在新数组里面
返回值:一个满足条件的新数组
不改变原始数组

16,every()

arr.every(function(item,index,arr){})---判断函数里是不是每一项都满足条件
返回值:一个布尔值。如果数组中每一项都满足条件,那么返回true,如果任意一个数据不满足条件,那么返回false
不改变原始数组

17,some()

arr.some(function(item,index,arr){})---判断数组里是不是有某一项满足条件
返回值:布尔值,只要原始数组中有一个数据满足条件,那么返回true,如果所有数据都不满足条件,那么返回false

ES6(ES2015)

18,find()

arr.find(function(item){})---根据条件找到满足条件的数据
返回值:满足条件的数据

19,findIndex()

arr.findIdenx(function(item){})---根据条件找到满足的数据
返回值:找到满足条件的数据的索引

20,flat()

arr.flat(数字)---拍平数组
数字表示扁平化都少层
返回值:拍平以后的数组

21,flatMap()

arr.flatMap(function(item.index,arr){})---一边拍平一边映射,只能拍平一层

22,fill()

arr.fill(填充的数据,开始索引,结束索引)---使用指定数据填充指定索引位置
填充内容:你想用什么数据填充数组里面的索引位置
开始索引:从哪个索引位置开始填充,默认是0
结束索引:填充到索引位置,默认是末尾

23,includes()

arr.includes(数据)---查看数组里面是否包含某个数据
返回值:布尔值。如果有返回true,如果没有返回false

24,copyWithin()

arr.copyWithin(目标位置,开始索引,结束索引)---用数组里面的内容替换数组里面的内容
目标位置:从哪个索引位置开始替换
开始索引-结束索引:作为替换内容

数组排序

递归二分法
插入排序

数组去重

直接在原始数组操作,每一个数字从自己的下一个开始向后比较,有一样多删除
利用一个新的数组存储,只要新数组里面没有就插入
利用对象不重名的特点进行操作