为什么我会得到".push not a function"?



我的代码有什么问题?

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 不是一个函数"。

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

所以,在你的代码中

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

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

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

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

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]);
}

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]);
}

最新更新