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

能否用shift函数清空数组?递归调用shift触发TypeError求解决

使用shift函数清空数组的问题解析

可以用shift函数清空数组,但你的递归写法犯了一个关键错误

你报错的原因很明确:arr.shift()方法返回的是被从数组中移除的单个元素(比如第一次调用时返回的是数字1),而你把这个元素传给了递归的del函数。数字类型根本没有shift方法,自然会抛出TypeError: arr.shift is not a function。

修正后的递归写法

要实现递归清空,你需要在每次调用shift后,继续把原数组传入递归函数——因为shift是直接修改原数组的,每次调用都会让数组长度减1:

let arr = [1,2,3,4];
function del(arr){
    if(arr.length === 0){
        return [];
    } else {
        arr.shift(); // 直接修改原数组,无需接收返回值
        return del(arr); // 继续传入原数组进行递归
    }
}
console.log(del(arr)); // 输出 []

额外补充:更高效的清空方式

如果不需要刻意用递归+shift,还有更简单高效的方法:

  • 直接设置数组长度为0:arr.length = 0(会保留原数组的引用)
  • 重新赋值为空数组:arr = [](会创建新的空数组,原数组引用会丢失)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 02:15:34