a.push不是一个功能; a.shift不是一个函数; a.splice不是一个功能

时间:2018-03-18 16:14:54

标签: javascript arrays

我环顾四周,并且无法弄清楚为什么我会在这个简单的旋转算法上抛出这个错误。与.push,.shift,.splice一起发生。请帮忙! (我知道有更有效的方法可以解决,只是想了解为什么我不能让这些方法起作用!)

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

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

1 个答案:

答案 0 :(得分:9)

a += i表示a = a + i+对数组没有特殊意义。通过使用+,您将强制转换为原语 - 在本例中为字符串 - 并进行字符串连接。从那时起a引用一个字符串,而不是一个数组,它没有数组方法。

如果您想添加元素,请使用push,而不是+

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

另请注意,分号(;不会在附加了块的控制流语句的末尾,并且 do 结束时所有其他陈述(例如,您的原始a += i,接近末尾的console.log等等。)