js中数组的方法
pop、push、reverse、shift、sort、splice、unshift、copyWithin、fill修改了数组自身的值。
方法 | 注释 |
---|---|
*push() | 可以向数组末尾 中添加 一个或多个元素,并返回数组新的长度(影响原来的数组) |
pop() | 删除 数组的最后一个元素 ,并将被删除的元素作为返回值返回(影响原来的数组) |
unshift() | 数组开头添加 一个或多个元素,并且返回新的数组长度(影响原来的数组) |
shift() | 删除 数组的第一个元素 ,并将被删除的元素作为返回值返回 |
slice() | 从已有的数组返回选定的元素。该方法不会影响原数组,而是将截取到的元素封装到一个新数组中返回。 |
*splice() | 删除数组中的指定元素。使用splice()会影响到原数组 ,会将指定元素从原数组中删除,并将被删除的元素作为返回值返回。 |
*concat() | 可以连接 两个或多个数组,并将新的数组返回。该方法不会对原数组产生影响 。 |
*join() | 将数组转换为一个字符串 ,该方法不会对原数组产生影响 ,而是将转换后的字符串作为结果返回。 |
reverse() | 用来反转数组(前边的去后边,后边的去前边)。该方法影响到原数组 |
sort() | 对数组元素进行排序,该方法会影响原数组 ,默认按照Unicode编码进行排序; |
*forEach() | 对数组进行遍历 |
*filter( ) | 用于把数组中的某些元素过滤掉,将满足条件的元素组成一个新数组并返回,不会对原数组产生影响,不能过滤空数组。 |
*map() | 使用map()会返回一个新数组,该新数组的元素是经过过滤(逻辑处理)过的函数。 |
*reduce() | 累加器 ,把上一次计算的值,给下一次计算进行相加 |
*some() | 用于检测数组中的元素是否满足指定条件。 |
*every() | 方法用于检测数组所有元素是否都符合指定条件 |
1、push()
可以向数组末尾
中添加
一个或多个元素,并返回数组新的长度(影响原来的数组)
let arr=[1,3,6];
arr.push(6,9,0);
console.log(arr);//[ 1, 3, 6, 6, 9, 0 ]
2、pop()
删除
数组的最后一个元素
,并将被删除的元素作为返回值返回(影响原来的数组)
let arr=[2,4,74,8];
const result=arr.pop();
console.log(result);//8
console.log(arr);//[ 2, 4, 74 ]
3、unshift()
数组开头添加
一个或多个元素,并且返回新的数组长度(影响原来的数组)
let arr=[3,5,7,2];
arr.unshift(666,2,5);
console.log(arr);//[666, 2, 5, 3,5, 7, 2]
4、shift()
删除
数组的第一个元素
,并将被删除的元素作为返回值返回
let arr=[27,3,5,1,7];
let result=arr.shift()
console.log(result);//27
console.log(arr);//[ 3, 5, 1, 7 ]
5、slice()
从已有的数组返回选定的元素。该方法不会影响原数组,而是将截取到的元素封装到一个新数组中返回。
参数:
- 截取开始的位置的索引,
包含
开始位置的索引(必需) - 截取结束的位置的索引,
不包括
结束位置的索引。若第二个参数不写,则会截取从开始索引往后的所有元素;如果传递一个负值,则从后往前计算。
let arr = [2, 4, 7, 2, 8];
第一个参数为正数,第二个参数为正数
let result=arr.slice(0,2);
console.log(result);//[ 2, 4 ]
console.log(arr);//[ 2, 4, 7, 2, 8 ]
第一个参数为正数,第二个参数为负数
let result=arr.slice(2,-1);
console.log(result);//[ 7, 2 ]
第一个参数为负数,第二个参数为负数
let result=arr.slice(-4,-1);
console.log(result);//[ 4, 7, 2 ]
第一个参数为正数,第二个参数不写,截取从开始索引往后的所有元素
let result=arr.slice(3);
console.log(result);//[ 2, 8 ]
第一个参数为负数,第二个参数不写,从后往前计算,截取从开始索引往后的所有元素
let result=arr.slice(-4);
console.log(result);//[ 4, 7, 2, 8 ]
6、splice()
删除数组中的指定元素。使用splice()会影响到原数组
,会将指定元素从原数组中删除,并将被删除的元素作为返回值返回。
参数:
- 开始位置的索引(必需);
- 删除的数量(不能为负数);
- 第三个及以后,可以传递一些新的元素,这些元素将会自动插入到开始位置索引前边
let arr=[2,4,8,1,4,7,3];
第一个参数为正数,第二个参数不写,删除从开始索引往后的所有元素
let result=arr.splice(4);
console.log(result);//[ 4, 7, 3 ]
console.log(arr);//[ 2, 4, 8, 1 ]
第一个参数为负数,第二个参数不写,从后往前计算,删除从开始索引往后的所有元素;
let result=arr.splice(-2);
console.log(result);//[ 7, 3 ]
console.log(arr);//[ 7, 3 ]
第一个参数为正数,第二个参数正数,删除从开始索引往后指定的数量;
let result=arr.splice(4,2);
console.log(result);//[ 4, 7 ]
console.log(arr);//[ 2, 4, 8, 1, 3 ]
第一个参数为负数,第二个参数正数,从后往前计算,删除从开始索引往后指定的数量;
let result=arr.splice(-5,2);
console.log(result);//[ 8, 1 ]
console.log(arr);//[ 2, 4, 4, 7, 3 ]
三个及三个以上参数,自动插入到开始位置索引前边
let result=arr.splice(5,1,999,666,555);
console.log(result);//[ 7 ]
console.log(arr);//[2, 4, 8, 1, 4,999, 666, 555, 3]
7、concat()
可以连接
两个或多个数组,并将新的数组返回。该方法不会对原数组产生影响
。
let arr1 = ['arr1',28, 27];
let arr2 = ['arr2',29, 19, 0, 42];
let arr3 = ['arr3', 78, 36];
let result1 = arr1.concat(arr3);
let result2=arr2.concat(arr1,arr3);
console.log(result1);//[ 'arr1', 28, 27, 'arr3', 78, 36 ]
console.log(result2);//['arr2', 29, 19,0, 42, 'arr1',28,27, 'arr3',78,36]
8、join()
将数组转换为一个字符串
,该方法不会对元数组产生影响,而是将转换后的字符串作为结果返回。
let arr = [1, 2, 3, 4, 5];
let result = arr.join()
console.log(typeof result, result);//string 1,2,3,4,5
console.log(typeof arr, arr);//object [ 1, 2, 3, 4, 5 ]
9、reverse()
用来反转数组(前边的去后边,后边的去前边)。该方法影响到原数组
let arr = [1, 2, 3, 4, 5];
arr.reverse();
console.log(arr);//[ 5, 4, 3, 2, 1 ]
10、sort()
对数组元素进行排序,该方法会影响原数组
,默认按照Unicode编码进行排序;
let arr=['赵六','李四','王麻子','张三','王五','钱七'];
arr.sort();
console.log(arr);//[ '张三', '李四', '王五', '王麻子', '赵六', '钱七' ]
即使对于纯数字的数字,使用sort()进行排序时,也会按照Unicode编码进行排序,所以对数值进行排序时,可能会得到错误的结果。
let arr=[2,8,99,5,88,9,22];
arr.sort();
console.log(arr);//[2, 22, 5, 8,88, 9, 99]
我们可以自己来指定排序的规则。可以在sort()添加一个回调函数,来指定排序规则。回调函数中需要定义两个形参,浏览器将会分别使用数组中的元素作为实参去调用回调函数。使用哪个元素调用不确定,但是肯定的是在数组中a一定在b前面。
浏览器会根据回调函数的返回值来觉得元素的顺序,如果返回大于0的值,则元素会交换位置;如果返回一个小于0的值,则元素位置不变;如果返回一个0,则认为两个元素相等,也不会交换位置。
let arr = [2, 3, 41, 5, 21, 11];
arr.sort(function (a, b) {
// document.write("a="+a);
// document.write("b="+b);
/* if(a>b){
//前边的大,返回的值大于0,交换位置
return 1;
}else if(a<b){
//前边的大,返回的值小于0,不交换位置
return -1;
}else {
//如果两个值相等,返回的值等于0,不交换位置
return 0;
}*/
//升序,如果需要升序排列,则返回a-b
// return a - b;
//降序,如果需要降序排列,则返回b-a
return b-a;
});
console.log(arr);//[ 41, 21, 11, 5, 3, 2 ]
11、forEach()
对数组进行遍历, 无法使用 break
和continue
,可以使用return
实现continue关键字的效果
参数
- 每一个元素(必需)
- 每个元素的下标(可选)
- 当前元素所属的数组对象。(可选)
const arr = [1, 5, 3, 8, 4];
arr.forEach((item, index, arr) => {
if (index === 3) {//下标为3时跳过当次
return;
}
console.log("元素", item, '下标', index, '遍历的数组', arr);
})
forEach可以暂停么?可以使用抛出异常
进行暂停;
const array = [1, 2, 3, 4, 5];
try {
array.forEach((item, index, arr) => {
console.log("元素", item);//数组的元素
if (index === 2) {
throw new Error("中断")
}
})
} catch (err) {
console.log(err);
}
12、filter()
用于把数组中的某些元素过滤掉,将满足条件的元素组成一个新数组并返回,不会对原数组产生影响,不能过滤空数组。
参数
- 每一个元素(必需)
- 每个元素的下标(可选)
- 当前元素所属的数组对象。(可选)
const arr=[{name:'张三',sex:'女'},{name:'王五',sex:'男'},{name:'赵六',sex:'女'},{name:'钱七',sex:'女'}]
let newArr=arr.filter((item,index,arr)=>{
//返回性别为“女”的元素
return item.sex==='女'
})
console.log('arr', arr);
console.log('newArr', newArr);
13、map()
使用map()会返回一个新数组,该新数组的元素是经过过滤(逻辑处理)过的函数。
参数
- 每一个元素(必需)
- 每个元素的下标(可选)
- 当前元素所属的数组对象。(可选)
注意:
map()不会对空数组进行检测。
map()不会改变原始数组。
map() 函数的作用是对数组中的每一个元素进行处理,返回新的元素。
const arr = [1,4,2,8]
let newArr = arr.map((item, index, arr) => {
if (item===8) {
item=88888
}
return item
})
console.log('arr', arr);//arr [ 1, 4, 2, 8 ]
console.log('newArr', newArr);//newArr [ 1, 4, 2, 88888 ]
14、reduce()
累加器
,把上一次计算的值,给下一次计算进行相加。
参数
- prev(之前计算过的值)
- next(之前计算过的下一个的值)
- index每个元素的下标(可选)
- arr当前元素所属的数组对象。(可选)
const arr = [5,25,35,45]
const result = arr.reduce(function(prev,next,index,arr){
console.log('prev', prev,index);
console.log('next', next);
console.log('prev + next', prev + next);
return prev + next;
})
console.log(result);
15、some()
some()用于检测数组中的元素是否满足指定条件。
some() 方法会依次执行数组的每个元素:
- 如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测。
- 如果没有满足条件的元素,则返回false。
- some() 不会对空数组进行检测。
- some() 不会改变原始数组。
参数
- 每一个元素(必需)
- 每个元素的下标(可选)
- 当前元素所属的数组对象。(可选)
const arr=[1,2,3,4,5];
const result=arr.some(item=>{return item===5});
console.log(result);//true
const temp=arr.some(item=>{return item===8})
console.log(temp);//false
16、every()
every() 方法用于检测数组所有元素是否都符合指定条件;
every() 方法使用指定函数检测数组中的所有元素:
- 如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测。
- 如果所有元素都满足条件,则返回 true。
- every() 不会对空数组进行检测。
- every() 不会改变原始数组。
参数
- 每一个元素(必需)
- 每个元素的下标(可选)
- 当前元素所属的数组对象。(可选)
const arr=[1,2,3,4,5];
const result=arr.every(item=>{return item===1});
console.log(result);//false
const arr1=[3,3,3,3,3];
const temp1=arr1.every(item=>{return item===3});
console.log(temp1);//true