[Typescript] 57. Medium - FlattenDepth
Recursively flatten array up to depth times.
For example:
type a = FlattenDepth<[1, 2, [3, 4], [[[5]]]], 2> // [1, 2, 3, 4, [5]]. flattern 2 times
type b = FlattenDepth<[1, 2, [3, 4], [[[5]]]]> // [1, 2, 3, 4, [[5]]]. Depth defaults to be 1
If the depth is provided, it's guaranteed to be positive integer.
/* _____________ Your Code Here _____________ */
type FlattenDepth<T extends any[], U extends number = 1, ACC extends any[] = []> = ACC['length'] extends U
? T
: T extends [infer A, ...infer RT]
? A extends any[]
? [...FlattenDepth<A, U, [...ACC, null]>, ...FlattenDepth<RT, U, ACC>]
: [A, ...FlattenDepth<RT, U, ACC>]
: [];
/* _____________ Test Cases _____________ */
import type { Equal, Expect } from '@type-challenges/utils'
type cases = [
Expect<Equal<FlattenDepth<[]>, []>>,
Expect<Equal<FlattenDepth<[1, 2, 3, 4]>, [1, 2, 3, 4]>>,
Expect<Equal<FlattenDepth<[1, [2]]>, [1, 2]>>,
Expect<Equal<FlattenDepth<[1, 2, [3, 4], [[[5]]]], 2>, [1, 2, 3, 4, [5]]>>,
Expect<Equal<FlattenDepth<[1, 2, ['3', 4], [[[5]]]]>, [1, 2, '3', 4, [[5]]]>>,
Expect<Equal<FlattenDepth<[1, [2, [3, [4, [5]]]]], 3>, [1, 2, 3, 4, [5]]>>,
Expect<Equal<FlattenDepth<[1, [2, [3, [4, [5]]]]], 19260817>, [1, 2, 3, 4, 5]>>,
]
The problem of current solution is possible to be overflow.
To find a better solution
分类:
TypeScript
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2020-10-19 [Angular] Saving draft form into Cookies
2020-10-19 [Angular] Data Resolver
2020-10-19 [Angular] DomSanitizer
2018-10-19 [Javascript] Use JavaScript's for-in Loop on Objects with Prototypes
2018-10-19 [Javascript] Understanding the .constructor property on JavaScript Objects
2018-10-19 [Rust] Load a WebAssembly Function Written in Rust and Invoke it from JavaScript
2018-10-19 [Rust] Setup Rust for WebAssembly