You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何消除本地变量实现 Lodash 函数的完全 Point-Free 写法

实现完全Point-Free写法的方案

你可以借助 Lodash/fp 内置的 _.converge 组合子消除临时变量 idx,它的作用是将多个分支函数的计算结果作为参数传入主函数,刚好适配你需要同时传入「要丢弃的段数」和「原始段数组」给 _.drop 的场景。

改写后的完整可运行代码如下:

const _ = require('lodash/fp');

const urls = [
  'http://localhost:8080/petstore/v1',
  '//localhost/petstore/v1',
  '{server}/batch-service/api/batches/lwm2m/v1',
  'https://{server}/batch-service/api/batches/lwm2m/v1',
  '/batch-service/api/batches/lwm2m/v1',
  '/',
]

const containAny = patterns => str => _.some(pattern => _.includes(pattern, str), patterns);

const convert = _.flow([
  _.split('/'),
  _.converge(_.drop, [
    // 分支1:计算需要丢弃的段数 = 最后一个匹配段的索引 + 1
    _.flow(_.findLastIndex(containAny(['{', '}', ':'])), _.add(1)),
    // 分支2:直接返回原始段数组作为drop的第二个入参
    _.identity
  ]),
  _.reject(_.isEmpty),
  _.join('/'),
  // 用柯里化方法替代路径拼接匿名函数
  _.add('/')
]);

_.map(convert)(urls);

逻辑说明

  • _.converge 接收的两个分支函数都会接收同一个输入(split 后的路径段数组),计算完成后分别作为第一个、第二个参数传入主函数 _.drop,逻辑和原有实现完全等价,不需要额外引入ap方法实现
  • 末尾的路径拼接逻辑直接用柯里化的 _.add('/') 替代,利用 Lodash/fp 函数默认柯里化、参数置后的特性,满足给传入路径前拼接 / 的需求

内容的提问来源于stack exchange,提问作者aleung

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 17:06:05