Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中提取方法链?_Javascript_Methods_Chaining - Fatal编程技术网

在Javascript中提取方法链?

在Javascript中提取方法链?,javascript,methods,chaining,Javascript,Methods,Chaining,给定一个执行一组操作的函数 const addSum = arr => arr.map(i => i+1).filter(i => i % 2 !== 0).map(i => i+1) 有没有办法提取方法链?例如,获取在对象中执行的操作树,如 {map: {filter: "map"}} 编辑:更新的示例您可以将扩展方法的名称和回调保存在二维数组中。然后使用reduce逐个调用每个函数,并在每次迭代中将结果作为累加器返回 const序列=(初始,ops)=>ops.

给定一个执行一组操作的函数

const addSum = arr => arr.map(i => i+1).filter(i => i % 2 !== 0).map(i => i+1)
有没有办法提取方法链?例如,获取在对象中执行的操作树,如

{map: {filter: "map"}}

编辑:更新的示例

您可以将扩展方法的名称和回调保存在二维数组中。然后使用
reduce
逐个调用每个函数,并在每次迭代中将结果作为累加器返回

const序列=(初始,ops)=>ops.reduce((acc[f,cb])=>acc[f](cb),初始)
//以:[“扩展名”,回调]格式保存每个操作部件
常量运算=[
['map',i=>i+1],
['filter',i=>i%2],
['map',i=>i+2]
]
常量输出=序列([1,2,3],操作)

console.log(输出)
我不理解optput。也不是例子
reduce
->
map
将不起作用,因为您将缩小为一个基元,而不是一个数组,因此无法映射结果。即使
reduce
给出了一个数组,结果如何与操作相对应?这些操作是连续的,没有一个是嵌套的。为什么需要这个?你想实现什么?即使这是有效的,我也不确定这能解决什么问题。你能提供一些背景吗?看,不,你不能。这些来自lambda演算,lambda演算是不可逆的。它是声明性的。一旦函数返回5,就无法知道它是如何到达那里的。另一种选择,例如量子编程,是可逆计算,可以做这样的事情()。您必须将代码解析为字符串,然后自己提取链。@sinanspd您可以使用AST解析器查看实际发生的情况。此外,可以知道每个操作将产生什么-例如,类型脚本和流,检查代码,并可以推断
reduce
map
的结果,因此可以知道转换是否是,比如说,
string[]->number[]->string
string[]->number[]->string[]
。然而,编写这样一个系统超出了SO的范围——它太宽泛了。