我的代码出了什么问题?
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不是一个功能”。
答案 0 :(得分:12)
数组推送函数在推送后返回数组的长度。
所以,在你的代码中
outPut = outPut.push(strarr[counter + j]);
outPut现在是一个数字,而不是一个数组,所以第二次循环,outPut不再有push方法。
一个简单的解决方案是将该行更改为
outPut.push(strarr[counter + j]);
答案 1 :(得分:3)
将一个或多个元素添加到数组的末尾并返回新元素 阵列的长度。
你有这条线:
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]);
}