提取Java语言中的方法链?

问题描述 投票:-1回答:1

给出执行一组操作的功能

const addSum = arr => arr.map(i => i+1).filter(i => i % 2 !== 0).map(i => i+1)

是否有方法可以提取方法链?例如,获取在对象中执行的操作的树,如

{map: {filter: "map"}}

编辑:更新的示例

javascript methods chaining
1个回答
0
投票

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

const sequence = (initial, ops) => ops.reduce((acc, [f, cb]) => acc[f](cb), initial)

const operations = [
  ['map', i => i + 1],
  ['filter', i => i % 2],
  ['map', i => i + 2]
]

const output = sequence([1, 2, 3], operations)

console.log(output)

或者,您可以像这样使用pipe函数:

const increment = n => arr => arr.map(i => i + n)
const evenFilter = arr => arr.filter(i => i % 2)

function pipe(...fns) {
  return (arg) => fns.reduce((prev, fn) => fn(prev), arg);
}

console.log(
  pipe(increment(1), evenFilter, increment(2))([1, 2, 3])
)
© www.soinside.com 2019 - 2024. All rights reserved.