Why do I get ".push not a function"?

11,149

Solution 1

Array push functions returns the length of the array after pushing.

So, in your code

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

outPut is now a number, not an array, so the second time through the loop, outPut no longer has a push method.

A simple solution is to change that line to

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

Solution 2

Array.push

adds one or more elements to the end of an array and returns the new length of the array.

And you have this line:

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

You're adding an element to outPut.push(strarr[counter + j]); and then reassigning outPush to the length of the array.

You should only call the push method on the array and a new element will be added:

for (var j = 0; j < k; j ++){
    outPut.push(strarr[counter + j]);
}

Solution 3

Array.push() returns the length of that particular array. In your code, you assign a number to outPut. Now when the loop runs for the second time, outPut is no more an array but a number, hence you get the error.

You check it by logging outPut to the console. You will see that

for (var j = 0; j < k; j ++){
    outPut = outPut.push(strarr[counter + j]);
    console.log(outPut);
}

It will show:

 1
  VM696:18 Uncaught TypeError: outPut.push is not a function
    at longestConsec (<anonymous>:18:21)
    at <anonymous>:1:1

All you need to do is change it to:

for (var j = 0; j < k; j ++){
    outPut.push(strarr[counter + j]);
}
Share:
11,149
Braden Foltz
Author by

Braden Foltz

Updated on July 23, 2022

Comments

  • Braden Foltz
    Braden Foltz almost 2 years

    What's wrong with my code?

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

    I keep on getting "outPut.push is not a function".