数组中常见的高阶函数

59 阅读2分钟

高阶函数: 把一个函数如果接受另一个函数作为参数,或者该函数会返回另一个函数作为返回值的函数,那么这个函数就是高阶函数

示例:

var nums = [10, 5, 11, 100, 55]

// 使用for循环过滤偶数
var newNums = []
for (var i = 0; i < nums.length; i++) {
    var num = nums[i]
    if (num % 2 == 0) {
        newNums.push(num)
    }
}

console.log(newNums) // 输出[10, 100]

区分两个概念

  • 函数function:独立的function,那么称之为是一个函数
  • 方法methods:当我们的一个函数属于某一个对象时,我们称这个函数是这个对象的方法

image.png 称foo是函数,foo是obj的一个方法

filter:过滤

`nums.filter((item)=>boolean)

// filter: 过滤
// [10, -5, -11, -100, -55]
// 10 => false => 不会被放到newNums
// -5 => false => 不会被放到newNums
// 11 => false => 不会被放到newNums
// 100 => false => 不会被放到newNums
// 55 => false => 不会被放到newNums

var newNums = nums.filter(function(item) {
    return false
})

console.log(newNums)//[]

map映射

// map: 映射
// [10, 5, 11, 100, 55]
var newNums2 = nums.map(function(item) {
    return item * 10
})
console.log(newNums2)  // 预期输出每个元素乘以10的结果

forEach 迭代

功能:遍历数组 nums 的每个元素

nums.forEach(function(item) {
    console.log(item)
})

find/findIndex

使用 find 方法查找数组中等于 11 的元素

var item = nums.find(function(item) {
    return item === 11
})
console.log(item)
// find 方法示例
let friends = [
    {name: "why", age: 18},
    {name: "kobe", age: 40},
    {name: "james", age: 35},
    {name: "curry", age: 30},
]

// 查找 name 为 'james' 的对象
var findFriend = friends.find(function(item) {
    return item.name === 'james'
})

console.log(findFriend) 
var friendIndex = friends.findIndex(function(item) {
    return item.name === 'james'
})
console.log(friendIndex)

reduce 累加

// reduce: 累加
// nums.reduce
// [10, 5, 11, 100, 55]
// var total = 0
// for (var i = 0; i < nums.length; i++) {
//     total += nums[i]
// }
// console.log(total)
// prevValue: 0, item: 10
// prevValue: 10, item: 5
// prevValue: 15, item: 11

nums.reduce(function(prevValue, item) {
    return prevValue + item
}, 
, 0) // 初始值设为0
console.log(total) // 输出181 (10+5+11+100+55)

下边的reduce方法的使用来实现上边累加函数