如何在 javascript 中根据未知数量的参数更改函数

How to change a function based on unknown number of arguments in javascript

提问人:Nicholas Foden 提问时间:9/20/2021 最后编辑:DecPKNicholas Foden 更新时间:9/20/2021 访问量:75

问:

有没有办法在返回的函数中添加或操作表达式?

以下是单个参数的示例:

function trackByProp(prop) {
  return function (value) {
    return value[prop];
  };
}

目的是扩展此功能以允许添加多个道具,例如

function trackByProp(...props) {
  props.forEach((prop) => {
    //Somehow add value[prop] to the return function???
  });

  return function (value) {
    return; // value[arg1] + value[arg2] + value[argN]
  };
}

或者,有没有更简单的方法来创建此函数?

JavaScript 函数编程 first-class-functions

评论

1赞 Andreas 9/20/2021
Array.prototype.reduce()
2赞 Andreas 9/20/2021
Stack Overflow 用户需要做多少研究工作?
1赞 VLAZ 9/20/2021
如何获取 javascript 对象属性的子集,然后对它们做任何你想做的事情?
1赞 VLAZ 9/20/2021
@NicholasFoden “不可能只是累积 value[props],因为 value 在调用时是不知道的”,为什么还要在调用内部函数之前这样做?如果代码在内部函数中,那么你确实有 .value
1赞 Andreas 9/20/2021
return props.reduce((prop, result) => result + value[prop])或者你实际上应该是什么。value[arg1] + value[arg2] ...

答:

0赞 Nicholas Foden 9/20/2021 #1
function trackByProps(...props) {
  return function (value) {
    return props.reduce((result, prop) => result + value[prop], "")
  }
}

在内部函数中使用属性可确保它们在闭包中可用。类似于单参数示例。然后,每次调用内部函数时都可以迭代它们。

评论

1赞 9/21/2021
在 FP 中,我们尽量保持函数简单。你原来的功能很好。如果要处理多个属性,则只需处理它们。map