高阶功能
#javascript #初学者 #编程 #functions

什么是高阶功能?

简单地说,高阶功能是接受单个或多个函数作为参数和/或返回函数作为其输出的函数。用作参数的函数称为回调函数

我们可以这样做,因为功能是第一类对象。这基本上意味着功能可以像其他数据类型一样起作用。例如,您可以将函数分配给一个称为函数表达式的变量。此外,功能可以存储在对象和数组中。

//function expression
let funcVariable = (a, b) => a + b

//function as an object's value
let funcInObj = {
fullName: (first, last) => `${first} ${last}`
}
//functions as values in an array
let funcInArr = [(first, last) => `${first} ${last}`, (age) => `I am ${age} years old`]

与其他数据类型不同,功能不仅存储数据,而且通常在您的代码中执行操作。通过访问分配给变量或对象或数组中的函数,您可以调用该函数并在代码中创建一个操作。

//calling a function assigned to a variable
funcVariable(6, 7) //will return 13

//calling a function in an object
funcInObj.fullName('Ilana', 'Wexler') //will return Temperance Brennan

//calling a function in an array
funcInArr[0]('Abbi', 'Abrams') //will return Seeley Booth
funcInArr[1](26) //will return I am 26 years old

现在我们了解了什么是高阶功能以及为什么我们可以以这种能力使用它们,我们将通过查看常见的数组来深入研究如何使用 如何使用高阶功能实际上是高阶功能的方法。

公共高阶功能以及如何使用它们

.filter(),.map()和.duce()是JavaScript中的本机方法,它使我们可以使用高阶功能轻松地操纵数据集。这些方法的背后是用于访问输入数组中每个元素的循环,因此您可以在每个值上调用各种功能。这些方法减少了我们必须使用的代码线数,并允许更有效的编码。在下面,我们将研究如何使用这些方法中的每一种。

.filter()
.filter()方法旨在吸收数组和功能。回调函数测试数组的每个元素,并且只会返回将函数测试作为新数组的值返回。

假设您有一个客户的数据集,您只需要40岁以上的客户。.filter()方法将是获取此信息的好方法。

let customers = [
{name: 'Ilana Wexler',
city: 'New York City',
age: 21
},
{name: 'Temperance Brennan',
city: 'Washington DC',
age: 45
},
{name: 'Abbi Abrhams',
city: 'New York City',
age: 26
},
]

let over40 = customers.filter((current) => current.age > 40)
console.log(over40) //will log [ { name: 'Temperance Brennan', city: 'Washington DC', age: 45 } ]

您可以查看上面的代码,我们正在使用正在测试每个元素的回调函数上使用过滤器方法,以查看哪个客户的年龄价值超过40。因为.filter()' s幕后代码,将所有测试的元素推入新数组。

.map()
.map()方法旨在根据函数的动作返回一个数组和函数,并返回一个新值。换句话说,在数组中的每个项目上都调用回调函数。然后将这些更新的值推入返回的新数组中。

假设我们想输出具有附加属性的新客户对象。 .map()方法可以帮助我们执行此操作。

let updatedCustomers = customers.map(current => {
  return {
    name: current.name,
    city: current.city,
    age: current.age,
    lovesPizza: true
  }
})

使用.map()方法,我们可以通过调用此回调函数来创建一个新数组,该回调函数将新的键/值对添加到输入数组的每个元素。

.Reduce()
.Reduce()方法设计用于摄入数组,函数和种子,并根据函数在数组上执行的动作返回累积值。种子值是可选的,但如果要返回一个不是数组的值,则应使用。

回调函数接受两个值,通常称为累加器当前,但可以用任何名称标记。 当前参数的值是输入数组中的个体值。

假设您想知道数据集中有多少客户居住在纽约市,Reduce()方法将是找到这一点的好方法。

let findNYCResidents = customers.reduce((accumulator, current) => {
if(current.city === 'New York City'){
accumulator += 1
}
return accumulator
}, 0)
console.log(findNYCResidents) //will return 2

。reduce()是一种非常强大的方法,它具有许多用途,因为种子价值允许的灵活性。在这里,我们在数组中访问每个值,并通过我们的回调函数将其传递给我们的累加器1时,每当客户通过回调函数的测试时。

了解高阶功能对于能够创建灵活,有效的代码非常重要,因此我希望您能够在阅读后能够更好地理解!