目录
JavaScript提供了丰富的数组方法来处理和操作数组。以下是一些常用的数组方法:
push()
: 向数组末尾添加一个或多个元素,并返回修改后数组的新长度。pop()
: 删除并返回数组的最后一个元素。shift()
: 删除并返回数组的第一个元素,并更新其他元素的索引。unshift()
: 在数组开头添加一个或多个元素,并返回修改后数组的新长度。concat()
: 将两个或多个数组合并成一个新数组,并返回该新数组。slice()
: 返回指定索引范围内的元素组成的新数组,不修改原始数组。splice()
: 在指定位置插入、删除或替换数组元素,并返回被删除元素组成的新数组。- fill():将数组中指定范围的元素替换为固定值,并返回修改后的数组
- find():在数组中查找符合条件的元素,并返回第一个符合条件的元素
- findIndex():返回的是符合条件的元素在数组中的索引
- includes():判断数组中是否包含指定元素,返回布尔类型
indexOf()
: 返回数组中第一个匹配元素的索引,如果未找到则返回-1。lastIndexOf()
: 返回数组中最后一个匹配元素的索引,如果未找到则返回-1。forEach()
: 遍历数组中的每个元素,并对其执行指定的函数。map()
: 遍历数组中的每个元素,并根据指定的函数创建一个新数组。filter()
: 创建一个由数组中满足指定条件的所有元素组成的新数组。some()
: 检查数组中是否存在满足指定条件的元素,只要有一个满足即返回true。every()
: 检查数组中所有元素是否都满足指定条件,只要有一个不满足即返回false。sort()
: 对数组元素进行排序,默认按照Unicode码点进行排序。reverse()
: 颠倒数组中元素的顺序。join()
: 将数组中所有元素以指定分隔符连接成一个字符串并返回。
增删
方法名 | 说明 | 是否改变原数组 | 返回值 |
Array.push() | 向当前数组的末尾添加一个或多个元素 | 是 | 数组的长度 |
Array.unshift() | 向当前数组的开头位置插入一个或多个元素 | 是 | 数组的长度 |
Array.pop() | 用于移除数组最后一个成员 | 是 | 删除的成员 |
Array.shift() | 用于移除数组第一个成员 | 是 | 删除的成员 |
Array.concat() | 用于合并两个或多个数组 | 否 | 新数组 |
Array.push()
let arr = [43, 33, 29, 67];
// 尾部添加数据
let i = arr.push(888);
console.log(i); //5
console.log(arr); //[43, 33, 29, 67, 888]
Array.unshift()
let arr = [43, 33, 29, 67];
// 头部添加数据
let i = arr.unshift(666);
console.log(i); //5
console.log(arr); //[666, 43, 33, 29, 67]
注意:如果添加的元素类型为数组类型,仍然会被当作一个元素看待,只是这个元素是数组类型而已。如果要合并两个数组,请使用 concat() 函数。
let arr2 = [111, 555, "sss"];
arr.push(arr2);
console.log(arr);//[43, 33, 29, 67, 888, Array(3)]
Array.pop()
// 删除尾部最后一个数据
let arr = [43, 33, 29, 67];
let i = arr.pop();
console.log(i); //67
console.log(arr);//[43, 33, 29]
Array.shift()
// 删除头部第一个数据
let arr = [43, 33, 29, 67];
let i = arr.shift();
console.log(i); //43
console.log(arr);//[33, 29, 67]
Array.concat()
// 合并数组
let arr = [43, 33, 29, 67];
let arr2= arr.concat(arr)//多个数组使用 , 隔开
console.log(arr)//[43, 33, 29, 67]
console.log(arr2)//[43, 33, 29, 67, 43, 33, 29, 67]
截取替换
方法名 | 说明 | 是否改变原数组 | 返回值 |
Array.slice() | 用于浅拷贝指定区间的数组成员 | 否 | 被截取部分的数组 |
Array.splice() | 用于从当前数组中(添加,删除,替换)一部分连续的元素 | 是 | 被删除和替换部分的数组 |
Array.fill() | 将一个固定值填充到起始索引到终止索引内 | 是 | 新数组 |
Array.slice()
// 浅拷贝数组
let arr = [43, 33, 29, 67];
//第一个参数是开始索引,第二个是结束索引
let arr2 = arr.slice(2, 4);
console.log(arr);//[43, 33, 29, 67];
console.log(arr2);//[ 29, 67];
Array.splice()
// 增删改
let arr = [43, 33, 29, 67];
//第一个参数是开始索引,第二个是删除的个数,后面的都是要添加的数据
// 新增 返回值为空数组,会修改原数组
arr.splice(2, 0, 111, 222, 333);
console.log(arr);//[43, 33, 111, 222, 333, 29, 67]
// 删除 从下标2开始删除2个数据,返回删除的成员
let arr2 = arr.splice(2, 2);
console.log(arr);//[43, 33, 333, 29, 67]
console.log(arr2);//[111, 222]
// 替换 从下标1开始替换后面2个成员,返回被替换的成员
let arr3 = arr.splice(1, 2, 55, 67);
console.log(arr); //[43, 55, 67, 29, 67]
console.log(arr3);//[33, 333]
Array.fill()
参数:
Value
:需要替换的元素值- start:开始的索引
- end:结束的索引
//替换
let arr = [43, 33, 29, 67];
arr.fill(22,1,3)
console.log(arr)//[43, 22, 22, 67]
查询过滤
方法名 | 说明 | 是否改变原数组 | 返回值 |
Array.filter() | 筛选符合回调函数里条件的元素 | 否 | 符合条件的数组 |
Array.includes() | 判断数组是否包含指定的值 | 否 | Boolean |
Array.find() | 返回满足条件的第一个元素 | 否 | 符合条件的第一个成员 |
Array.findIndex() | 返回满足条件的第一个元素的下标 | 否 | 符合条件第一个的下标 |
Array.indexOf() | 从头部查找第一次出现指定字符的位置 | 否 | 查找到的下标 |
Array.lastIndexOf() | 从尾部查找第一次出现指定字符的位置 | 否 | 查找到的下标 |
Array.filter()
回调函数的参数:
Value
:当前数组中处理的元素index
:数组中正处理的当前元素的索引array
:被调用的数组
// 筛选数据
let arr = [43, 33, 29, 67];
//第一个参数是回调函数,第二个参数是回调函数的this
let arr2 = arr.filter((value,index) => {
console.log(index)// 0 1 2 3
return value>35
});
console.log(arr2);//[43, 67]
Array.includes()
参数:
Value
:需要查找的元素值index
:查找数组开始的索引
//查找是否存在
let arr = [43, 33, 29, 67];
var is = arr.includes(33)
console.log(is)//true
Array.find() Array.findIndex()
// 获取符合条件的第一个元素和下标
let arr = [43, 33, 29, 67];
let value = arr.find((v) => v > 40);
let i = arr.findIndex((v) => v > 40);
console.log(value);//43
console.log(i);//0
Array.indexOf()
//获取指定元素的第一个下标
let arr = [43, 33, 29, 67, 29];
let i = arr.indexOf(29);
console.log(i);//2
Array.lastIndexOf()
//获取指定元素的第一个下标
let arr = [43, 33, 29, 67, 29];
let i = arr.lastIndexOf(29);
console.log(i);//4
遍历
方法名 | 说明 | 是否改变原数组 | 返回值 |
Array.forEach() | 用于迭代数组的每项成员 | 否 | undefined |
Array.map() | 根据回调函数,更新给定数组中的每个值 | 否 | 回调函数的结果 |
Array.every() | 判断是否所有成员都满足特定条件 | 否 | Boolean |
Array.some() | 判定数是否存在一个成员特定条件 | 否 | Boolean |
Array.forEach()
//遍历数组
let arr = [43, 33, 29, 67];
//forEach第一个参数是回调函数,第二个参数是回调函数的this
arr.forEach((v, i) => (arr[i] = v * 3));
console.log(arr);//[129, 99, 87, 201]
Array.map()
//遍历数组
let arr = [43, 33, 29, 67];
//map第一个参数是回调函数,第二个参数是回调函数的this
let arr2 = arr.map((v) => v * 2);
console.log(arr2);//[86, 66, 58, 134]
Array.every()
// 是否符合条件
let arr = [43, 33, 29, 67];
let isall = arr.every((v) => v > 3);
console.log(isall);//所有的项都大于3结果为true
Array.some()
// 是否符合条件
let arr = [43, 33, 29, 67];
let isitem = arr.some((v) => v > 22);
console.log(isitem);//有大于22的所以结果为true
回调函数的参数:
Value
:当前数组中处理的元素index
:数组中正处理的当前元素的索引array
:被调用的数组
注意: 没有办法中止或者跳出
forEach和map
循环,除了抛出一个异常。如果您正在测试一个数组里的元素是否符合某条件,且需要返回一个布尔值,那么可使用every()
或some()
。如果可用,新方法find()
或者findIndex()
也可被用于真值测试的提早终止。
其他
方法名 | 说明 | 是否改变原数组 | 返回值 |
Array.join() | 根据字符将数组所有成员连接到字符串中 | 否 | String |
Array.reverse() | 用于将当前数组的成员顺序全部反转 | 是 | 反转后的数组 |
Array.sort() | 用于将数组的成员按指定顺序进行排序 | 是 | 排序后的数组 |
Array.join()
//转字符串
let arr = [43, 33, 29, 67];
let str = arr.join("-");
console.log(str)//43-33-29-67
Array.reverse()
// 反转
let arr = [43, 33, 29, 67];
arr.reverse();
console.log(arr);//[67, 29, 33, 43]
Array.sort()
//排序
let arr = [43, 33, 29, 67];
//数字:根据最前面的数字1-9排序,字母根据最前面的数字a-z排序
arr.sort();
console.log(arr);//[29, 33, 43, 67]