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
相关产品推荐
相关产品推荐

