1、数组常用方法之 push
push
是用来在数组的末尾追加一个元素
返回值:追加数组的长度
注意:会改变原数组
var arr = [1, 2, 3]
// 使用 push 方法追加一个元素在末尾
arr.push(4)
console.log(arr) // [1, 2, 3, 4]
2、数组常用方法之 pop
pop` 是用来删除数组末尾的一个元素
返回值:被删除的数据
注意:会改变原数组
var arr = [1, 2, 3]
// 使用 pop 方法删除末尾的一个元素
arr.pop()
console.log(arr) // [1, 2]
3、数组常用方法之 unshift
unshift
是在数组的最前面添加一个元素
返回值:添加数据后,数组的长度
注意:会改变原数组
var arr = [1, 2, 3] // 使用 unshift 方法向数组的最前面添加一个元素 arr.unshift(4) console.log(arr) // [4, 1, 2, 3]
4、数组常用方法之 shift
shift
是删除数组最前面的一个元素
返回值:删除的数据
注意:会改变原数组
var arr = [1, 2, 3] // 使用 shift 方法删除数组最前面的一个元素 arr.shift() console.log(arr) // [2, 3]
5、数组常用方法之 splice
splice
是截取数组中的某些内容,按照数组的索引来截取
注意:会改变原数组
语法: splice(从哪一个索引位置开始,截取多少个,替换的新元素)
(第三个参数可以不写)
var arr = [1, 2, 3, 4, 5] // 使用 splice 方法截取数组 arr.splice(1, 2) console.log(arr) // [1, 4, 5] console.log(arr) // [1, 0, 5] 中间0不替换
arr.splice(1, 2)
表示从索引 1 开始截取 2 个内容
第三个参数没有写,就是没有新内容替换掉截取位置
var arr = [1, 2, 3, 4, 5] // 使用 splice 方法截取数组 arr.splice(1, 2, '我是新内容') console.log(arr) // [1, '我是新内容', 4, 5]
arr.splice(1, 2, '我是新内容')` 表示从索引 1 开始截取 2 个内容
然后用第三个参数把截取完空出来的位置填充
6、数组常用方法slice()截取数组
语法:数组.slie(起始索引,结束索引)
特点1:包前不包后
特点2:可以写负整数,就是倒数第几个,等价于 length+负整数
起始索引不写默认为0
结束索引不写默认为length
返回值:一个新数组 ;里面的数组就是截取的数据内容
注意:不会改变原数组
// slice() // var arr = ['a','b','c','d','e']; // var res = arr.slice(1); // var res = arr.slice(1,3); // var res = arr.slice(0,-1); // console.log(arr); // console.log(res);
7、数组常用方法之 reverse
reverse` 是用来反转数组使用的
返回值:反转后的数组
注意:会改变原数组
var arr = [1, 2, 3] // 使用 reverse 方法来反转数组 arr.reverse() console.log(arr) // [3, 2, 1]
8、数组常用方法之 sort
sort` 是用来给数组排序的
注意:会改变原数组
数组.sort() ASCII一位一位比较
数组.sort(function(a,b){return a-b}) 升序
数组.sort(function(a,b){return b-a}) 降序
返回值:排序后的数组
var arr = [2, 3, 1] // 使用 sort 方法给数组排序 arr.sort() console.log(arr) // [1, 2, 3]
这个只是一个基本的简单用法
9、数组常用方法之 concat
concat` 是把多个数组进行拼接
和之前的方法有一些不一样的地方,就是 concat
不会改变原始数组,而是返回一个新的数组
var arr = [1, 2, 3] // 使用 concat 方法拼接数组 var newArr = arr.concat([4, 5, 6]) console.log(arr) // [1, 2, 3] console.log(newArr) // [1, 2, 3, 4, 5, 6]
注意: concat 方法不会改变原始数组
10、数组常用方法 filter
语法:数组.filter(function(item,index,arr){})
返回值:一个新的数组
- 原始数组中满足条件的数据
- 在回调函数中 以return 的新形式书写过滤条件
// filter() // var arr = [1, 2, 3, 4, 5]; // // 获取arr中大于3的数据 形成新数组 // var res = arr.filter(function (item) { // return item > 2; // }) // console.log(res); /* 封装方法 + 需求: 根据我的条件原始数组进行过滤,把原始数组中满足条件的数据拿出 组成一个新的数组 + 荔枝: - 原始数组:[10,20,30,40] - 条件 > 20 - [30,40] */ // 1. 准备方法 Array.prototype.myFilter = function(cb){ // 准备一个新数组 var ary = []; // 根据 回调函数的条件, 向 新数组中 添加成员 for(var i = 0;i<this.length;i++){ // 调用cb var r = cb(this[i],i,this); // ary.push(this中满足条件的数据) r&&ary.push(this[i]); } // 将新数组返回 return ary; } // 将来和私用 var arr = [10,20,30,40]; var res = arr.myFilter(function(item,index,arr){ // 过滤条件 return item>20; }) console.log(res);
11、数组常用方法之 join 连接数组
语法:数组.join(连接赋符号)
如果连接符号不写,默认使用 ','
作用:把数组中的每一项数据,使用连接符号拼接为一个字符串
返回值:一个连接好的字符串
注意:不会改变原数组
var arr = [1, 2, 3] // 使用 join 链接数组 var str = arr.join('-') console.log(arr) // [1, 2, 3] console.log(str) // 1-2-3
12、数组常用方法 froEach()
专门用于遍历数组
语法:
数组.forEach(function(item,index,arr) { //这个回调函数,数组有多少数据,就会执行多少次 item 表示数组的每一个项 index 表示数组每一个项的索引 arr 表示原数组 })
返回值:没有,undefined
意义:用来遍历数组
数组调用 arr.myForEach() // 报错 arr.myForEach is not a function
-
能不能像forEach一样,数组.myForEach 调用
需要让我们封装的方法能被数组直接调动
需要把这个方法赋值给一个 '空间'内
把我们自己写的 myForEach 放到 '数组方法空间' 中
'数组方法空间' 是一个对象数据类型
'数组方法空间' 被我们称之为 Array.prototype
将我们写的myForEach函数 添加到 '数组方法空间' 这个对象中
Array.prototype.myForEach = myForEach;
此时数组就可以直接调用myForEach方法 : arr.myForEach()
// 在myForEach中也遍历数组 Array.prototype.myForEach = myForEach; // 此时数组就可以直接调用myForEach方法 // arr.myForEach(function b(item,index,arr){ // console.log(item,index,arr); // }) // 求arr数组中的数据和 var sum = 0; arr.myForEach(function(item){ sum += item; }) console.log(sum);
13、数组常用方法---map
语法: 数组.map(function(item,index,arr){})
作用:对原数组进行映射
返回值:就是一个和原数组长度一样的新数组,
并且新数组中的数据是被映射操作过的内容
注意:不改变原数组
// map() // var arr = [10,20,30,40]; // // arr中的数据加百分之30 // var res = arr.map(function(item){ // return item*1.3 // }) // console.log('原数组',arr); // console.log('映射操作后的数组',res); /* 封装一个和数组的map一样功能的方法---myMap + 需求: - 根据原数组的长度 返回 一个新的数组 - 在回调函数中可以对原数组中的每一个数据进行操作(我需要的操作) - 新数组中得到的数据,就是操作后的数据 */ // 1. 准备一个方法,这个方法可以直接被数组调用 Array.prototype.myMap = myMap function myMap(cb){ // 在这个函数中,需要找到调用这个方法的那个数组 // 因为需要遍历调用此方法的数组 // 数组方法函数内的关键字 this 指向 调用这个方法的数组 // console.log(this); // 准备一个新数组 var ary = []; // 遍历数组 根据原始数组(this)的长度 和cb 的操作 // 向ary中添加数据 for (var i = 0; i < this.length; i++) { // 使用 myMap方法的人,会把他想要操作数据的方法写在 b 回调函数中 // 需要调用cb,并且把每一项数据 给b函数 // res接受的就是b函数内中的返回值 // 因为b函数内返回的是 每一项 +1 的结果 // res 得到的就是每一个数据 +1 的结果 var res = cb(this[i],i,this); ary.push(res); } // 把操作号的数组返回 return ary; } // 2. 将来使用的时候 var arr1 = [1,2,3,4]; var arr2 = [10,20,30,40]; var arr3 = [100,200,300,400]; // 数组直接调用 我们自己写的myMap方法 var resArr = arr3.myMap(function b(item,index,arr){ // 一些操作,假设操作数据 +1 // 以返回值的形式 把结果给出去 return item+1; }) console.log(resArr);
14、数组常用方法 every
判断数组中是不是所有项都满足条件
如果所有项都满足条件,那么返回 true
只要有任意一项不满足条件,就返回false
条件写在回调函数的 return 后
// // every // // 判断数组中的数据是否都大于1 // var r1 = arr.every(function(item){ // return item > 0; // }) // console.log(r1); // 封装我们自己的every方法---myEvery // 1. 准备方法 Array.prototype.myEvery = function (cb) { // 假设变量,假设所有项都满足条件 var flag = true; // 通过遍历数组 来验证假设 for (var i = 0; i < this.length; i++) { var r = cb(this[i], i, this) //如果在循环中,r 为 false 了,说明当前这一个项不满足条件 // 推翻假设 if (!r) { flag = false; break; } } // 返回flag return flag; }
15、数组常用方法some
判断数组中是不是有每一个项满足条件
只要数组中任意一项满足条件,就返回 true
只有所有项都不满足条件的时候,才返回false
条件写在回调函数的 return 后
// some // 判断数组中的数据是否有大于4的 // var r2 = arr.some(function(item){ // return item > 4; // }) // console.log(r2); // 封装我们自己的some方法---mySome // 准备一个mySome方法 Array.prototype.mySome = function (cb) { // 假设变量,假设没有数据满足条件 var flag = false; for (var i = 0; i < this.length; i++) { var r = cb(this[i], i, this); if (r) { flag = true; break; } } return flag; } // 将来使用的时候 var arr = [10, 20, 30, 40, 50]; // // 判断是否都大于 20 // var r1 = arr.myEvery(function (item) { // return item > 5; // }) // console.log(r1); // 判断是否有大于60的数 var r1 = arr.mySome(function (item) { return item > 60; }) console.log(r1);
16、数组常用方法flat()
语法:数组.flat(数字)
如果不传参数,默认拍平一层
传递参数是几,就拍平几层
不管多少维度都可以直接拍平,传递Infinity
作用:拍平一个数组(把多维数组转为一维)数组常用方法
// flat() // var arr = [1,[2,[3,[4,[5]]]]]; // console.log(arr); // // var resArr = arr.flat() // // var resArr = arr.flat(3) // var resArr = arr.flat(Infinity) // console.log(resArr);
17、数组常用方法 find()
- 语法:数组.find(function(item,index,arr){})
+ 返回值:数组中满足条件的第一个数据
- 回调函数中 以 return 的形式书写
// find() // var arr = [1, 2, 3, 4]; // var res = arr.find(function (item) { // return item > 1; // }) // console.log(res);
18、数组常用方法 findIndex()
- 语法:数组.findIndex(function(item,index,arr){})
+ 返回值:数组中满足条件的第一个数据的索引
- 以 return 的形式书写
// findIndex() // var arr = ['a', 'b', 'c', 'd']; // var arr = [1, 2, 3, 4]; // var res = arr.findIndex(function (item) { // // return item === 'c'; // return item > 2; // }) // console.log(res);
19、 数组常用方法 includes()
- 语法:数组.includes(数据)
+ 返回值:布尔值
- 如果数组中有该数据,那么就是true
- 如果数组中没有该数据,那么就是false
//includes() // var arr = ['a', 'b', 'c', 'd']; // // var res = arr.includes('a'); // var res = arr.includes('z'); // console.log(res);
20、数组常用方法 fill()
- 语法:数组.fill(要填充的数据,开始索引,结束索引)
+ 开始索引不写 默认为0
+ 结束索引不写 默认为数组数据的最后一个索引
+ 特点:索引 包前不包后(包含开始索引,不包含结束索引)
- 作用:替换,按照索引位置替换数组中的指定索引的数据
- 注意:直接改变原数组
- 注意:只能替换现有的数据,不能新增
// fill() // var arr = [10,20,30,40,50]; // arr.fill('数据1'); // arr.fill('数据1',1); // arr.fill('数据1',1,3); // arr.fill('数据1',1,6); // console.log(arr);
21、数组常用方法 reduce()
- 语法:数组.reduce(function(prev,item,index,arr){},init)
- init 如果不写,默认 使用数组的第一个数据
- 作用:叠加
— 返回值:就是叠加后的结果
// reduce() // var arr = [10, 20, 30, 40, 50]; // var res = arr.reduce(function (prev, item) { // console.log(prev, item) // return prev+item; // },0) // console.log(res); /* 你设置 init 位置的参数 循环第一次, prev 就是init 位置的数据,item就是数组的第一项 循环第二次及之后, prev 就是上一次 return 的内容,item就是数组当前的第几项 你没有设置 init 位置的参数 循环第一次, prev 就是数组的第一项[0]数据,item就是数组的第二项 循环第二次及之后, prev 就是上一次 return 的内容,item就是当前数组的后一项 */
22、数组常用方法 concat() 拼接数组
语法:数组.concat(数组2,数据,数组3...)
作用:把所有参数中的数组或数据追加到原始数组的后面,如果参数是数组,那么就拆开追加
返回值:拼接好的新数组
注意:不会改变原数组
//concat() // var arr = [1,2,3]; // var res = arr.concat('a','b','c',['d','e']); // console.log(arr); // console.log(res);
23、数组常用方法indexOf()
语法:数组.indexOf(要查找的数据)
数组.indexOf(要查找的数据,开始索引)
返回值:
从前向后查找数组中的数据,找到的第一个满足要求的数据
返回第一个满足要求的数据的索引
如果有这个数据 则返回 数据 的索引 ; 如果没有这个数据 则-1
//indexOf() // var arr = ['a', 'b', 'c', 'b', 'e']; // var res = arr.indexOf('b'); // var res = arr.indexOf('b',2); // var res = arr.indexOf('z'); // console.log(res);
24、数组常用方法 lastIndexOf()
语法: 数组.lastIndexOf(要查找的数据)
数组.lastIndexOf(要查找的数据,开始索引)
返回值:
- 从后向前查找数组中的数据,找到的第一个满足要求的数据
- 返回第一个满足要求的数据的索引
- 如果有这个数据 则返回 数据 的索引
- 如果没有这个数据 则-1
//lastIndexOf() // var arr = ['a', 'b', 'c', 'b', 'e']; // var res = arr.lastIndexOf('b'); // var res = arr.lastIndexOf('b', 2); // var res = arr.lastIndexOf('z'); // console.log(res);