我的代码有什么问题?
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]);
}