Return 并以箭头函数格式传递回调
Return and pass a callback in arrow function format
我想要
- return 箭头函数和
- 将箭头函数传递给另一个函数。
代码:
const NumberValue = {
GREATER_THAN_0: i => i > 0,
LESS_THAN_0: i => i < 0,
EQUAL_TO_0: i => i == 0
};
function printStatistics(...a) {
for (var key in NumberValue) {
if (NumberValue.hasOwnProperty(key)) {
console.log(key + " -> " + sum(NumberValue[key],a));
}
}
}
function sum(callback, ...a) {
return a.filter(callback);
}
console.log(printStatistics(-5, 5, 4, 3, 2, 1, 0, -1));
我正在尝试以下操作:
然后我传递给 printStatistics(...a)
一个 int 数组
我想用一个 int 数组打印 NumberValue
对象的每个键,必须根据存储在 NumberValue
对象的相应值中的每个箭头表达式进行过滤。
我不知道什么不起作用。箭头的 return 是函数还是将它们传递给另一个函数。
预期结果:
GREATER_THAN_0 -> [5,4,3,2,1]
LESS_THAN_0 -> [-5,-1]
EQUAL_TO_0 -> [0]
但我得到:
GREATER_THAN_0 ->
LESS_THAN_0 ->
EQUAL_TO_0 ->
undefined
简历中
那么我怎样才能 return 并正确传递箭头函数呢?
尝试键入而不是“...a”“[...a] 并给出一个数字数组作为打印统计函数的参数
问题
问题是你使用了...a
两次。这是 rest parameters syntax ,它将所有参数变成一个数组。但是,由于它被使用了两次,第一次将参数转换为数组,第二次你只是传递所述数组并将其包装到另一个数组中:
console.log("result:", foo(1, 2, 3));
function foo(...a) {
console.log("`a` in foo:", a); // a = [1, 2, 3]
return bar(a);
}
function bar(...a) {
console.log("`a` in bar:", a); // a = [[1, 2, 3]] - array inside array
return a;
}
解决方案
有两种方法可以解决这个问题:
不要使用剩余参数
您可以简单地从第二次调用中删除剩余参数语法,这将避免将数组包装到另一个数组中
console.log("result:", foo(1, 2, 3));
function foo(...a) {
console.log("`a` in foo:", a); // a = [1, 2, 3]
return bar(a);
}
function bar(a) { //no rest parameter syntax
console.log("`a` in bar:", a); // a = [1, 2, 3] - single array
return a;
}
const NumberValue = {
GREATER_THAN_0: i => i > 0,
LESS_THAN_0: i => i < 0,
EQUAL_TO_0: i => i == 0
};
function printStatistics(...a) {
for (var key in NumberValue) {
if (NumberValue.hasOwnProperty(key)) {
console.log(key + " -> " + sum(NumberValue[key],a));
}
}
}
function sum(callback, a) {
return a.filter(callback);
}
console.log(printStatistics(-5, 5, 4, 3, 2, 1, 0, -1));
将数组散布到调用中
如果您希望仍然能够调用带有可变数量参数的第二个函数,您可以保留其余参数语法,而是 use spread syntax to make the array into a list of arguments:
console.log("result:", foo(1, 2, 3));
function foo(...a) {
console.log("`a` in foo:", a); // a = [1, 2, 3]
return bar(a);
}
function bar(...a) {
console.log("`a` in bar:", a); // a = [[1, 2, 3]] - array inside array
return a;
}
console.log("result:", foo(1, 2, 3));
function foo(...a) {
console.log("`a` in foo:", a); // a = [1, 2, 3]
return bar(...a); //spread syntax
}
function bar(...a) { //rest syntax
console.log("`a` in bar:", a); // a = [1, 2, 3] - single array
return a;
}
const NumberValue = {
GREATER_THAN_0: i => i > 0,
LESS_THAN_0: i => i < 0,
EQUAL_TO_0: i => i == 0
};
function printStatistics(...a) {
for (var key in NumberValue) {
if (NumberValue.hasOwnProperty(key)) {
console.log(key + " -> " + sum(NumberValue[key], ...a));
}
}
}
function sum(callback, ...a) {
return a.filter(callback);
}
console.log(printStatistics(-5, 5, 4, 3, 2, 1, 0, -1));
我想要
- return 箭头函数和
- 将箭头函数传递给另一个函数。
代码:
const NumberValue = {
GREATER_THAN_0: i => i > 0,
LESS_THAN_0: i => i < 0,
EQUAL_TO_0: i => i == 0
};
function printStatistics(...a) {
for (var key in NumberValue) {
if (NumberValue.hasOwnProperty(key)) {
console.log(key + " -> " + sum(NumberValue[key],a));
}
}
}
function sum(callback, ...a) {
return a.filter(callback);
}
console.log(printStatistics(-5, 5, 4, 3, 2, 1, 0, -1));
我正在尝试以下操作:
然后我传递给 printStatistics(...a)
一个 int 数组
我想用一个 int 数组打印 NumberValue
对象的每个键,必须根据存储在 NumberValue
对象的相应值中的每个箭头表达式进行过滤。
我不知道什么不起作用。箭头的 return 是函数还是将它们传递给另一个函数。
预期结果:
GREATER_THAN_0 -> [5,4,3,2,1] LESS_THAN_0 -> [-5,-1] EQUAL_TO_0 -> [0]
但我得到:
GREATER_THAN_0 ->
LESS_THAN_0 ->
EQUAL_TO_0 ->
undefined
简历中
那么我怎样才能 return 并正确传递箭头函数呢?
尝试键入而不是“...a”“[...a] 并给出一个数字数组作为打印统计函数的参数
问题
问题是你使用了...a
两次。这是 rest parameters syntax ,它将所有参数变成一个数组。但是,由于它被使用了两次,第一次将参数转换为数组,第二次你只是传递所述数组并将其包装到另一个数组中:
console.log("result:", foo(1, 2, 3));
function foo(...a) {
console.log("`a` in foo:", a); // a = [1, 2, 3]
return bar(a);
}
function bar(...a) {
console.log("`a` in bar:", a); // a = [[1, 2, 3]] - array inside array
return a;
}
解决方案
有两种方法可以解决这个问题:
不要使用剩余参数
您可以简单地从第二次调用中删除剩余参数语法,这将避免将数组包装到另一个数组中
console.log("result:", foo(1, 2, 3));
function foo(...a) {
console.log("`a` in foo:", a); // a = [1, 2, 3]
return bar(a);
}
function bar(a) { //no rest parameter syntax
console.log("`a` in bar:", a); // a = [1, 2, 3] - single array
return a;
}
const NumberValue = {
GREATER_THAN_0: i => i > 0,
LESS_THAN_0: i => i < 0,
EQUAL_TO_0: i => i == 0
};
function printStatistics(...a) {
for (var key in NumberValue) {
if (NumberValue.hasOwnProperty(key)) {
console.log(key + " -> " + sum(NumberValue[key],a));
}
}
}
function sum(callback, a) {
return a.filter(callback);
}
console.log(printStatistics(-5, 5, 4, 3, 2, 1, 0, -1));
将数组散布到调用中
如果您希望仍然能够调用带有可变数量参数的第二个函数,您可以保留其余参数语法,而是 use spread syntax to make the array into a list of arguments:
console.log("result:", foo(1, 2, 3));
function foo(...a) {
console.log("`a` in foo:", a); // a = [1, 2, 3]
return bar(a);
}
function bar(...a) {
console.log("`a` in bar:", a); // a = [[1, 2, 3]] - array inside array
return a;
}
console.log("result:", foo(1, 2, 3));
function foo(...a) {
console.log("`a` in foo:", a); // a = [1, 2, 3]
return bar(...a); //spread syntax
}
function bar(...a) { //rest syntax
console.log("`a` in bar:", a); // a = [1, 2, 3] - single array
return a;
}
const NumberValue = {
GREATER_THAN_0: i => i > 0,
LESS_THAN_0: i => i < 0,
EQUAL_TO_0: i => i == 0
};
function printStatistics(...a) {
for (var key in NumberValue) {
if (NumberValue.hasOwnProperty(key)) {
console.log(key + " -> " + sum(NumberValue[key], ...a));
}
}
}
function sum(callback, ...a) {
return a.filter(callback);
}
console.log(printStatistics(-5, 5, 4, 3, 2, 1, 0, -1));