数组常用方法
总结:
- push() 在数组末尾添加一个或多个元素,返回新数组长度
- pop() 删除数组最后一个元素,返回被删除的元素
- shift() 删除数组第一个元素,返回被删除的元素
- unshift() 在数组开头添加一个或多个元素,返回新数组长度
- splice() 删除、替换或添加数组元素,返回被删除的元素
- fill() 用一个固定值填充数组中的元素,返回填充后的数组
- sort() 对数组元素进行排序,返回排序后的数组
- reverse() 颠倒数组元素顺序,返回颠倒后的数组
- slice() 截取数组的一部分,返回一个新数组
- at() 获取指定索引的元素
- indexOf() 获取每个元素的索引
- lastIndexOf() 获取每个元素的最后一个索引
- find() 查找符合条件的第一个元素
- findLast() 查找符合条件的最后一个元素
- findIndex() 查找符合条件的第一个元素的索引
- findLastIndex() 查找符合条件的最后一个元素的索引
- includes() 判断数组中是否包含某个元素
- every() 判断数组中所有元素是否都满足指定条件
- some() 判断数组中是否存在满足指定条件的元素
- map() 对数组中的每个元素执行一个函数,返回一个新数组
- filter() 返回符合条件的元素组成的新数组
- reduce() 对数组中的每个元素执行一个函数(迭代),返回一个值
- reduceRight() 从右向左迭代数组中的每个元素,返回一个值
- forEach() 对数组中的每个元素执行一个函数
- join() 返回一个将数组中元素用指定字符连接起来的字符串
- toString() 返回一个将数组中元素用逗号连接起来的字符串
- concat() 返回一个将两个或多个数组连接起来的新数组
- flat() 返回一个将多维数组展平的新数组
- flatMap() 对数组中的每个元素执行一个函数,并将结果展平一层,返回一个新数组
- 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(目标位置,开始索引,结束索引)---用数组里面的内容替换数组里面的内容
目标位置:从哪个索引位置开始替换
开始索引-结束索引:作为替换内容
数组排序
递归二分法
插入排序
数组去重
直接在原始数组操作,每一个数字从自己的下一个开始向后比较,有一样多删除
利用一个新的数组存储,只要新数组里面没有就插入
利用对象不重名的特点进行操作