私のコードの何が問題になっていますか?
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]);
outPutが配列ではなく数値になったため、ループを2回目に実行したときに、outPutにはPushメソッドがなくなりました。
単純な解決策は、その行を
outPut.Push(strarr[counter + j]);
配列の最後に1つ以上の要素を追加し、配列の新しい長さを返します。
そしてあなたはこの行を持っています:
_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
に番号を割り当てます。ループが2回目に実行されると、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]);
}