我有一个箭头功能,由此处的社区Ele慷慨地提供,但对于我的生命,我无法理解:
let isValid = function (arr, arr2) {
let sum = (array, n) => array.reduce((a, an) => a + (an === n), 0);
return !arr2.some(n => !arr.some(an => an === n && sum(arr, an) === sum(arr2, n)))
};
有人会善良地将其转换为标准功能,以便我可以在我的技能水平上进行学习吗?
谢谢。
我的假设:
function isValid (arr, arr2) {
...this is where i'm lost
}
答案 0 :(得分:5)
您的假设对于外部函数是正确的。其中的第一行将变为:
function sum(array, n) {
return array.reduce(function(a, an) {
return a + (an === n);
}, 0);
Have a read about Arrow Functions以及它们与常规函数声明的区别。大多数情况下(但不是完全),它们只是语法糖而不是常规功能。
在上下文方面,即this
指向函数体内的内容方面,它们之间的区别最为明显。箭头函数始终在声明该函数的外部主流上下文中运行。常规功能,例如通过bind()
,可以重新指向其他上下文。
let foo = function() {
let bar = () => this;
return bar();
}.bind('a');
foo(); //'a', because foo()'s context is 'a'
那糖怎么样?乍一看可能会造成混淆,尤其是当您在一行中具有多个箭头功能时。要记住的一件事是它们只是您以前必须手动编写代码的隐式简写。
let foo = a => a+1;
与
相同function foo2(a) { return a + 1; }
(hoisting会有所不同,但这超出了此答案的范围。)
从上面我们可以看到的一件事是,=>
之后的部分是单个语句,它被解释为返回值,而无需我们实际编写return
。 / p>
foo(1); //2
这对于执行在一行代码中可以表示的一项简单功能非常有用。如果需要更多详细功能,请照常将代码放在{}
中。
let foo3 = a => {
return a+1;
};
这再次与上述foo
和foo2
相同。
因此,最后,打破了那条可怕的线:
let sum = (array, n) => array.reduce((a, an) => a + (an === n), 0);
它说:
sum
array
和n
{
和}
。该工作是调用reduce()
并(隐式地)返回值reduce
的第一个参数,即回调,接受两个争论,a
和an
reduce
一样,也只有一项工作要做,该工作就是返回a + (an === n)
的值关于糖的最后一个词(您可能已经在上面发现)是,使用箭头功能,如果仅接受单个参数,则无需将其包装在方括号中。但是,有多个参数,并且像往常一样以逗号分隔。
let foo = single_arg => alert(1);
let foo2 = (arg1, arg2) => alert(2);
希望这会有所帮助。
答案 1 :(得分:4)
该方法使用很多箭头函数,并且可以转换为以下标准函数声明:
SELECT _id, location, day, title, teacher, canceled
, t.d + "startTime"
, t.d + "endTime"
FROM "Schedules" s
, LATERAL (SELECT now()::date + (s.day + 6 - EXTRACT(dow from now())::int) % 7) t(d)
ORDER BY location, day, "startTime";
答案 2 :(得分:3)
您可以使用https://babeljs.io/将新的javscript编译为“旧” javascript。您可以直接在其主页上尝试。
这是它提供的输出:
sudo /opt/tyk-gateway/install/setup.sh --dashboard=1 --listenport=8080 --redishost=<hostname> --redisport=6379