2797. 带有占位符的部分函数
2022年7月5日大约 2 分钟
2797. 带有占位符的部分函数
type JSONValue =
| null
| boolean
| number
| string
| JSONValue[]
| { [key: string]: JSONValue }
type Fn = (...args: JSONValue[]) => JSONValue
function partial(fn: Fn, args: JSONValue[]): Fn {
return function (...restArgs) {
let _args = args.map((item) => {
if (restArgs.length > 0 && item === '_') {
return restArgs.shift()
}
return item
})
if (restArgs.length > 0) {
_args = _args.concat(restArgs)
}
return fn(...(_args as JSONValue[]))
}
}题目要点
「2797. 带有占位符的部分函数」属于 API 行为建模题,关键在于把题面语义转成可验证的函数契约与状态约束。
思路拆解
- 提取题目的显式规则与隐式规则(返回值、this 语义、副作用范围)。
- 用最小可行实现覆盖主路径,再逐步补齐异常路径。
- 对原型扩展题优先保证幂等性与可组合性,避免污染全局行为。
复杂度分析
- 时间复杂度:通常由单次调用的内部循环或字符串/数组操作决定。
- 空间复杂度:重点观察闭包捕获、中间数组与临时对象创建开销。
边界与测试
- 非法参数、缺省参数、类型不匹配。
- 多次调用、链式调用、上下文切换。
- 与原生行为对齐性(是否符合语言规范直觉)。
工程实践
将“语义规则”写成注释清单并配套最小测试样例,比只给实现代码更利于长期复用。
总结
建模题的沉淀价值在于形成可迁移的语义模板:先定契约,再写实现,最后用反例校验边界。
