JS中Array的内置函数
2022-09-22 22:44:19

目录
[TOC]

JS箭头函数

也可称作Lambda表达式

原始写法 与 箭头函数的写法区别如下

1
2
3
4
5
6
7
8
var arr = ["wei","ze","yang"];
//原始写法
arr.map(function(item){
return "Mr."+item;
});
//Lambda表达式写法
arr.map(item=>"Mr."+item);
//都是输出 ["Mr.wei", "Mr.ze", "Mr.yang"]

箭头函数写法需要注意的地方有:

1
2
3
4
 var student = (name,age) => { //当参数有多个或者没有时,需要加括号
age +=1; //如果函数体不止一行,应该用花括号括起来,这时就要显示地return
return "name:" + name + ",age:" + age;
}

下面的常用方法都可以改写为箭头函数的形式

原始for循环

写起来比较麻烦,执行效率较高

1
2
3
4
5
let a = [1,2,3];
let len = a.length //最好先把长度存起来,提升效率
for(let i=0;i<len;i++){
console.log(a[i]); //结果依次为1,2,3
}

foreach

比较简洁,但性能稍劣于原始for循环,且也不能强制return结束循环

1
2
3
4
5
6
var a = [1,2,3];
a.forEach(function(value,key,arr){
console.log(value) // 结果依次为1,2,3
console.log(key) // 结尾依次为0,1,2
console.log(arr) // 三次结果都为[1,2,3]
})

ES5:for-in

1
2
3
4
5
6
7
8
9
10
var arr = [1,2,3];
//循环数组
for(var item in arr){
console.log(item); //结果为依次为0,1,2
}
var obj = {0:1,1:2,2:3};
//循环对象的属性
for(var key in obj){
console.log('key:' + key + ',value:' + objkey]); //结果为依次为0,1,2
}

ES6:for-of

for-of和for-in语句不同的是只能循环数组,不可以循环对象

1
2
3
4
var a = [1,2,3];
for(var value of a){
console.log(value) // 结果依次为1,2,3
}

map

通过里面的return语句,返回一个新的数组,不会改变原数组

return语句是在每一次遍历中返回新数组中的一个元素,而不是跳出循环的

1
2
3
4
5
6
7
8
var b = a.map(function(value,key,arr){
console.log(value) // 结果依次为1,2,3
console.log(key) // 结尾依次为0,1,2
console.log(arr) // 三次结果都为[1,2,3]
return value+1;
})
console.log(a); // 结果为[ 1, 2, 3 ]
console.log(b); // 结果为[ 2, 3, 4 ]

Filter

每一次遍历中若return true 则将该元素添加到新数组

即过滤符合条件的元素进行返回,同时不改变原数组

1
2
3
4
5
6
7
8
9
10
11
12
var a = [1,2,3];
var b = a.filter(function(value,key,arr){
console.log(value) // 结果依次为1,2,3
console.log(key) // 结尾依次为0,1,2
console.log(arr) // 三次结果都为[1,2,3]
if(value === 3){
return false;
}
return true;
})
console.log(a); // 结果为[ 1, 2, 3 ]
console.log(b); // 结果为[ 1,2 ]

Reduce

从左到右将数组元素计算为一个值,从右到做的话是reduceRight函数

1
2
3
4
5
6
7
8
9
10
var a = [1,2,3];
var b = a.reduce(function (count, value,key,arry) {
console.log(count); // 结果依次为0,1,3
console.log(value); // 结果依次为1,2,3
console.log(key); // 结果依次为0,1,2
console.log(arry) // 三次结果都为[1,2,3]
return count + value;
},0);
console.log(a); // 结果为[ 1, 2, 3 ]
console.log(b) // 结果为6

Slice

返回一个新的数组,包含从 start 到 end (不包括该元素)的 arrayObject 中的元素。
该方法并不会修改数组,而是返回一个子数组。如果想删除数组中的一段元素,应该使用方法 Array.splice()。

参数 是否必需 描述
start 必需 规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。
end 可选 规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。
1
2
3
let a = [1,2,3,4.5];
a.slice(2,4)
输出 [3, 4.5]

Every & Some

区别:*every()是所有都满足条件才返回true,some()*是若有一个满足条件就返回true

1
2
3
4
5
6
var ages = [32, 33, 16, 40];
//检测数组 ages 的所有元素是否都大于等于 18 结果为 false
function checkAdult(age) {
return age >= 18;
}
ages.every(checkAdult);
  • 如果组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测。
  • 如果所有元素都满足条件,则返回 true
  • every() 不会对空数组进行检测,也不会改变原始数组。
1
2
3
4
5
6
var ages = [3, 10, 18, 20];
//检测数组中是否有元素大于 18 结果为 true
function checkAdult(age) {
return age >= 18;
}
ages.some(checkAdult);
  • 如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测。
  • 如果没有满足条件的元素,则返回false。
  • some() 不会对空数组进行检测,也不会改变原始数组。

更多Array方法参考 菜鸟教程