我们先来创建一个数组,之后的方法都是建立在这个数组上的
var arr = [
{ id: 1, name: 'lili', gender: "fmale", class: "six" },
{ id: 2, name: 'xixi', gender: "fmale", class: "five" },
{ id: 3, name: 'ximing', gender: "male", class: "six" },
{ id: 4, name: 'hihi', gender: "fmale", class: "three" },
{ id: 5, name: 'baibai', gender: "male", class: "one" }
];
forEach
**作用:**和 for 循环一样,是用来遍历数组的,数组有几项,它就遍历多少次
语法:arr.forEach( function ( item, index, arr){ “js 语句” })
解释: forEach 是一个方法,必须传一个匿名函数作为实参,而这个匿名函数也有三个参数
第一个参数(item):数组中的每一项
第二个参数(index):数组的下标
第三个参数(arr):就是这个数组
里面的变量可以根据自己的习惯去定义
arr.forEach(function(item, index, arr){
console.log(item,index,arr);//object(每一项就是一个对象),下标,arr
})
后面两个参数也可以不写,但第几个参数代表什么是固定的,不是说你把 index 放在第一个参数的位置上,第一个参数就代表元素下标了,它还是表示数组中的每一项
arr.forEach(function(item, index, arr){
//可以进行操作
item.id = item.id - 1;
console.log(item.id);//0,1,2,3,4
})
//如果省略后面的参数,第一个参数还是代表数组中的每一项,并且我们可以用箭头函数
arr.forEach(item =>{
console.log(item.name);//lili,xixi,ximing,hihi,baibai
})
map
作用:和 forEach 类似,不过他可以对数组的每一项进行操作,并返回一个新的数组
语法:arr.map( function ( item, index, arr){ return 值})
解释: forEach 是一个方法,必须传一个匿名函数作为实参,而这个匿名函数也有三个参数,后面两个参数也可以不写
第一个参数(item):数组中的每一项
第二个参数(index):数组的下标
第三个参数(arr):就是这个数组
首先我们来看下面这个例子
var newArr = arr.map(function(item, index, arr){
return index;//基本数据类型
})
console.log(arr);//基本数据类型,不会改变原数组
console.log(newArr);//[0,1,2,3,4]
通过这个例子我们可以知道 map 方法的一些特性
1:不会改变原数组,而是返回一个新的数组(但如果是复杂数据类型就会改变原数组)
2:return 后面的值就是我们数组中每一项新的值,return 后面不管是什么,他都将作为新数组中的每一项而数组,例如上面,return 了这个数组的下标,数组的中每一项就变成了下标
那我们如何改变每一项中的某个属性从而改变数组呢,我们可以在返回之前,每一项进行操作,然后在返回每一项,我们看下下面的例子就知道了
//我想把每一项中的id值都加10
var newArr = arr.map(function(item){
item.id = item.id + 10;// 先操作
return item;//返回的是一整个对象
})
console.log(arr);//会改变原数组
console.log(newArr);//一个数组,并且id也改变了
filter
作用:按照我们的条件筛选数组,把原数组中满足条件的筛选出来,并返回一个新的数组
语法:arr.filter( function ( item, index, arr){ return 条件 })
解释: filter 是一个方法,必须传一个匿名函数作为实参,而这个匿名函数也有三个参数,后面两个参数也可以不写
第一个参数(item):数组中的每一项
第二个参数(index):数组的下标
第三个参数(arr):就是这个数组
var newArr = arr.filter(function(item, index){
return index > 2;
})
console.log(arr);//不会改变原数组
console.log(newArr);//下标大于2 的两项
var newArr = arr.filter(function(item, index){
return item.id > 2;
})
console.log(arr);//原数组
console.log(newArr);//id大于2 的两项
some
传参与上面三种相同
作用:执行完成返回一个布尔值。执行匿名函数内的代码时,返回一个boolean值判断真假,若不是布尔值返回给some。当所有返回值return 有一个为真(true),返回true,全为假(false)返回假(false)
var newArr = arr.some((item,index)=>{
return index > 2;//有符合条件的则返回 true
})
console.log(arr);//原数组
console.log(newArr);//true
var newArr = arr.some((item,index)=>{
return index > 5;//没有符合条件的则返回 false
})
console.log(arr);//原数组
console.log(newArr);//false
every
形式与 forEach 相同
作用:遍历一个数组,如果数组的全部元素都为 true ,则返回 true ,否则返回 false
var newArr = arr.every((item)=>{
return item.id > 0;//每一项的id都大于0
})
console.log(newArr);//true
var newArr2 = arr.every((item)=>{
return item.gender === "fmale";//不是每个gender 的值都为fmale
})
console.log(newArr2);//false
reduce:累加的一个 api
形式与 forEach 就有点不同
作用:
语法:arr.reduce( function ( prev, next ){ return 值}, init)
解释: 它要传两个参数,第一个参数:匿名函数 ,,第二个参数:初始值
匿名函数中的第一个参数:上一次累加的结果
第二个参数:数组中的每一项
我们用一个例子来说明一下
//初始值为 0,开始的时候:prev = 0,next.id = 1;两者相加为 1 (因为next代表了数组中的每一项)
//接下来,把 上一次的和给 prev,prev = 1, next.id = 2;两者进行相加为 3
//把 3 赋给 prev ,依次进行下去
var a = arr.reduce((prev, next)=>{
return prev + next.id;
},0)
console.log(a);//15