web-dev-qa-db-ja.com

「.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は機能ではありません」と表示され続けます。

9
Braden Foltz

配列プッシュ関数は、プッシュ後の配列の長さを返します。

だから、あなたのコードで

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

outPutが配列ではなく数値になったため、ループを2回目に実行したときに、outPutにはPushメソッドがなくなりました。

単純な解決策は、その行を

outPut.Push(strarr[counter + j]);
13
Jaromanda X

Array.Push

配列の最後に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]);
}
_
3
Ali

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