TypeScript数组截取:保留指定数量元素的最优实现方案
TypeScript 数组截断至指定长度的优质实现方式
以下是几种高效、类型安全的实现方案,根据你的使用场景选择即可:
1. 使用 slice(无副作用,优先推荐)
slice 是数组原生方法,不会修改原数组,返回一个包含前N个元素的新数组。如果原数组长度小于等于目标长度,会直接返回原数组,鲁棒性强。
function truncateArray<T>(arr: T[], targetLength: number): T[] { return arr.slice(0, targetLength); } // 调用示例 const originalArr = new Array(62).fill('element'); const truncatedArr = truncateArray(originalArr, 60); console.log(truncatedArr.length); // 输出 60
适用场景:需要保留原数组、希望避免副作用的场景,这是最通用的方案。
2. 使用 splice(原地修改)
splice 会直接修改原数组,从指定索引开始删除后续所有元素。适合不需要保留原数组、希望节省内存的场景。
function truncateArrayInPlace<T>(arr: T[], targetLength: number): void { if (arr.length > targetLength) { arr.splice(targetLength); } } // 调用示例 const originalArr = new Array(62).fill('element'); truncateArrayInPlace(originalArr, 60); console.log(originalArr.length); // 输出 60
注意:splice 会改变原数组,调用前确认不需要保留原数组的原始状态。
3. 直接修改数组 length 属性(极简原地修改)
数组的 length 属性是可写的,直接将其设置为目标长度会自动截断超出部分的元素,代码最简洁。
function truncateArrayByLength<T>(arr: T[], targetLength: number): void { if (arr.length > targetLength) { arr.length = targetLength; } } // 调用示例 const originalArr = new Array(62).fill('element'); truncateArrayByLength(originalArr, 60); console.log(originalArr.length); // 输出 60
适用场景:追求代码简洁、允许修改原数组的场景,性能最优。
内容的提问来源于stack exchange,提问作者user3871177
相关产品推荐
相关产品推荐

