1.filter()检测数值元素,并返回符合条件所有元素的数组。
filter() 方法创建一个新的数组,新数组中的元素检查指定数组中符合条件的所有元素。
注意: filter() 不会对空数组进行检测。
注意: filter() 不会改变原始数组。
array.filter(function(currentValue,index,arr), thisValue)
函数参数:
- currentValue 必须。当前元素的值
- index 可选。当前元素的索引值
- arr 可选。当前元素属于的数组对象
- thisValue 可选。初始值
var arr3 = [1,2,2,3,5,6,3,4]
//通过indexOf返回指定值第一次出现位置的下标,来数组去重
var arr4 = arr3.filter((x,index,self)=>{
return self.indexOf(x) === index
})
console.log(arr4)
2.map()通过指定函数处理数组的每个元素,并返回处理后的数组。
map返回一个新数组参数
array.map(function(currentValue,index,arr), thisValue)
函数参数:
- currentValue 必须。当前元素的值
- index 可选。当前元素的索引值
- arr 可选。当前元素属于的数组对象
- thisValue 可选。初始值
- map() 方法按照原始数组元素顺序依次处理元素。
注意: map() 不会对空数组进行检测。
注意: map() 不会改变原始数组。
注意: map()每个遍历的值都要return出去
var arr = [1, 2, 3,4]
var arr1 = arr.map(x => x *2) //[2, 4, 6,8]
var arr1 = arr.map(x => {x *2}) //[undefined, undefined, undefined,undefined]
var arr1 = arr.map(x => {return x *2}) //[2, 4, 6,8]
var arr1 = arr.map(x => {
if (x == 4) {
return x * 2;
}
}) //[undefined, undefined, undefined,8]
var arr1 = arr.map(x => {
if (x == 4) {
return x * 2;
}
}) //[2, 4, 6,8]
3.reduce()将数组元素计算为一个值(从左到右)。
reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
reduce() 可以作为一个高阶函数,用于函数的 compose。
注意: reduce() 对于空数组是不会执行回调函数的。
array.reduce(function(total , currentValue , currentIndex, arr), initialValue)
函数参数:
- total 必需。表示上一次调用回调时的返回值,或者初始值 。
- currentValue 必需。当前元素
- currentIndex 可选。当前元素的索引
- arr 可选。当前元素所属的数可选。
- initialValue 传递给函数的初始值组对象。
//求和
var nums1 = nums.reduce((num, cur) => {
//因未先传入值,num为第一个值15,cur为第二个值2
return num + cur
})
//数组去重
var nums2 = nums.reduce((num, cur, index, arr) => {
//因未先传入值,num为第一个值15,cur为第二个值2
num.indexOf(cur) === -1 && num.push(cur)
return num
}, [])
//数组去重s
var nums3 = nums.reduce((num, cur) => {
//因未先传入值,num为第一个值15,cur为第二个值2
return num.includes(cur) ? num : num.concat(cur)
}, [])