我正在独自完成Udemy课程ES6 Javascript: The Complete Developer's Guide
Stephen Grider
。前4个部分中的大多数都太简单了,所以我一直在用胖箭头功能(这是我的新手,本课程中到目前为止尚未介绍)进行所有练习,以使其变得更加有趣。
但是,当我到达Coding Exercise 8: Challenging! Implementing 'reject'
时,我不知道如何使用粗箭头功能。
面临的挑战是创建一个名为'reject'的函数,其功能与Array.filter
相反。从概念上讲,这很容易-只需使用!
。
很困惑,我发现了一个使用胖箭头功能的建议解决方案。在这里:
const numbers = [10, 20, 30];
function reject(array, iteratorFunction) {
return array.filter(arrItem => !iteratorFunction(arrItem))
}
reject(numbers, num => num > 15);
我不明白。有人可以解释这是怎么回事吗?另外,使用胖箭头功能是否有更好的实现方式?
答案 0 :(得分:2)
要理解该示例,需要熟悉并使用回调函数,匿名函数和箭头语法。
考虑代码:
function reject(array, iteratorFunction) {
return array.filter(arrItem => !iteratorFunction(arrItem));
}
数组filter
的定义:filter()
方法创建一个新数组,其中所有元素都通过了由提供的回调函数实现的测试。
什么是回调函数?回调函数是作为参数传递给另一个函数的函数,然后在外部函数内部调用该函数以完成某种例程或操作。当在调用过程中实际传递带有其主体(代码)的函数时,就会发生这种调用。
以下代码是一个回调函数:arrItem => !iteratorFunction(arrItem)
该函数返回一个布尔值。该函数被编写为箭头语法。
这也可以写成:
function(arrItem) {
return !iteratorFunction(arrItem);
}
iteratorFunction
也是一个回调函数,它返回一个布尔值。 '!'运算符使返回的布尔值取反(将true转换为false,反之亦然)。
因此,以下reject
功能代码的工作方式类似:
function reject(array, iteratorFunction) {
return array.filter(function(arrItem) {
return !iteratorFunction(arrItem);
});
}
-以下与以上相同-
function reject(array, iteratorFunction) {
let myCallback = function(arrItem) {
return !iteratorFunction(arrItem);
};
return array.filter(myCallback);
}
iteratorFunction是回调函数
在示例中,请考虑以下代码:num => num > 15
该代码是回调函数的箭头语法。也可以写成:
function(num) {
return num > 15;
}
这意味着代码:
let result = reject(numbers, num => num > 15);
-也可以写为-
let result = reject(numbers, function(num) {return num > 15});
-也可以写为-
let myCallback = function(num) {
return num > 15;
}
let result = reject(numbers, myCallback);
结果是:[ 10 ]
答案 1 :(得分:1)
num => num> 15转换为以下匿名函数
function(num){
return num > 15
}
如果只有一个参数,则无需提供圆括号;如果要返回表达式,则可以跳过花括号并输入“ return”
函数语法一目了然,那就是将函数作为参数拒绝并提供数组值作为匿名函数的参数。