为什么我得到“.push不是函数”?

时间:2018-01-23 04:22:16

标签: javascript function typeerror

我的代码出了什么问题?

function longestConsec(strarr, k) {
  var currentLongest = "";
  var counter = 0;
  var outPut = [];

  if(strarr.length === 0 || k > strarr.length || k <= 0){
    return "";
  }
  for(var i = 0; i < strarr.length; i++){
    if(strarr[i] > currentLongest){
      currentLongest = strarr[i];
    }
  }
  while(currentLongest !== strarr[counter]){
    counter = counter + 1
  }
  for (var j = 0; j < k; j ++){
    outPut = outPut.push(strarr[counter + j]);
  }

  outPut = outPut.join("");

   return outPut;
}

我继续“outPut.push不是一个功能”。

3 个答案:

答案 0 :(得分:12)

数组推送函数在推送后返回数组的长度。

所以,在你的代码中

outPut = outPut.push(strarr[counter + j]);

outPut现在是一个数字,而不是一个数组,所以第二次循环,outPut不再有push方法。

一个简单的解决方案是将该行更改为

outPut.push(strarr[counter + j]);

答案 1 :(得分:3)

Array.push

  

将一个或多个元素添加到数组的末尾并返回新元素   阵列的长度。

你有这条线:

outPut = outPut.push(strarr[counter + j]);

您正在向outPut.push(strarr[counter + j]);添加元素,然后将outPush重新分配给数组的长度。

您应该只调用数组上的push方法,并添加一个新元素:

for (var j = 0; j < k; j ++){
    outPut.push(strarr[counter + j]);
}

答案 2 :(得分:1)

Array.push()返回该特​​定数组的长度。在您的代码中,您为outPut分配一个数字。现在当循环第二次运行时,outPut不再是一个数组而是一个数字,因此你得到错误。

您可以通过将outPut记录到控制台来进行检查。你会看到

for (var j = 0; j < k; j ++){
    outPut = outPut.push(strarr[counter + j]);
    console.log(outPut);
}

它会显示:

 1
  VM696:18 Uncaught TypeError: outPut.push is not a function
    at longestConsec (<anonymous>:18:21)
    at <anonymous>:1:1

您需要做的就是将其更改为:

for (var j = 0; j < k; j ++){
    outPut.push(strarr[counter + j]);
}