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

JavaScript数组旋转算法报错:push/shift等方法不是函数求解答

问题分析与解决

嘿,我来帮你搞清楚这个问题!你遇到的错误根源其实出在第一个循环里的数组初始化方式,咱们一步步拆解:

核心问题:数组被意外转成了字符串

你看这段代码:

var a = [] 
for (i = 1; i <= n; i++) { a += i }; 

这里a一开始是数组[],但当你用+=操作符的时候,JavaScript会自动把数组转换成字符串(空数组转成空字符串),然后拼接数字。比如当n=5时,循环结束后a的值是"12345",而不是你期望的数组[1,2,3,4,5]!

字符串是没有.push()、.shift()这些数组方法的,所以后面调用这些方法的时候自然会抛出错误。

修正方案:正确初始化数组

把第一个循环里的a += i改成a.push(i),这样才能正确往数组里添加元素:

function rotation(n, d) { 
    var a = [] 
    for (i = 1; i <= n; i++) { a.push(i) }; 
    for (x = 1; x <= d; x++) { a.push(a[0]); a.shift(); } 
    console.log(a) 
} 
rotation(5, 4)

现在运行这段代码,就会输出[5,1,2,3,4],符合数组旋转的预期。

额外小提示

另外,最好给循环里的变量i和x加上var或者let声明,避免变成全局变量哦,比如:

for (let i = 1; i <= n; i++) { a.push(i) }; 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:33:00