forEach()
var a =[1,2,3]
a.forEach((val,ind,arr)=>{
//val是数组的每个元素,ind是元素的索引,arr是数组本身
a[ind] = 0
})
console.log(a)
输出:[0,0,0]
forEach不能通过val修改数组,也不能返回新数组,其实就类似for循环,只是遍历数组。
filter()
var a =[1,2,3]
let b = a.filter((val,ind,arr)=>{
//val是数组的每个元素,ind是元素的索引,arr是数组本身
return val>2
})
console.log(b)
输出:[3]
filter可以过滤指定条件的元素,添加并返回一个新数组。不会对原数组产生影响。
map()
var a =[1,2,3]
let b = a.map((val,ind,arr)=>{
//val是数组的每个元素,ind是元素的索引,arr是数组本身
return val*2
})
console.log(b)
输出:[2,4,6]
map可以操作原数组里的元素,然后返回一个新数组。不会对原数组产生影响。
every()
var a =[1,2,3]
let b = a.every((val,ind,arr)=>{
//val是数组的每个元素,ind是元素的索引,arr是数组本身
return val>2
})
console.log(b)
输出:false
every返回的是一个布尔值,若所有元素全部符合返回条件则返回true,反之则返回false
some()
var a =[1,2,3]
let b = a.some((val,ind,arr)=>{
//val是数组的每个元素,ind是元素的索引,arr是数组本身
return val>2
})
console.log(b)
输出:true
some与every相反,若所有元素里只要有一个符合返回条件则返回true,反之则返回false。
reduce()
var a =[1,2,3]
let b = a.reduce((total,val,ind,arr)=>{
//total是初始值,val是数组的每个元素,ind是元素的索引,arr是数组本身
return total+val
},0)
//给total赋初始值
console.log(b)
输出:6
reduce 的格式为:数组.reduce((初始数据,元素,索引,数组)=>{return 初始数据},初始值)
reduce可以遍历数组,并把每一次return的值再赋予total,最后遍历完数组后,把total返回给新变量。
若不写return,只写了初始值,则会遍历数组内的全部元素,遍历后的第一次循环total值为赋予的初始值的内容,其余循环total的值都为undefined。
若不写return ,也不写初始值,则会遍历数组的从第二个元素开始往后的所有元素,遍历后的第一次循环total值为数组里第一个元素的内容,其余循环total的值都为undefined。
若写了return,没写初始值,则会遍历数组的从第二个元素开始往后的所有元素, 遍历后的第一次循环total值为数组里第一个元素的内容,其余循环total值都为return的值。
若遍历空数组,写了return ,没写初始值 会报错。
若遍历空数组,写了return,写了初始值 则不会执行执行回调函数里的任何代码,会直接返回初始值作为结果。
若遍历空数组,没写return,写了初始值 则不会执行执行回调函数里的任何代码,会直接返回初始值作为结果。
reduceRight()
var a =[1,2,3]
let b = a.reduce((total,val,ind,arr)=>{
//total是初始值,val是数组的每个元素,ind是元素的索引,arr是数组本身
return total+val
},0)
//给total赋初始值
console.log(b)
输出:6
reduceRight的操作与reduce一样,只不过reduce是从左边开始遍历数组,reduceRight是从右边开始遍历数组。