Skip to content
Advertisement

Javascript: .push is not a function

I am having a problem with my code:

var arrays = [[1, 2, 3], [4, 5], [6]];
console.log(reduce(arrays,function(array,b){
  return array.push(b);
}));

function reduce(array,combine){
  var current = [];
  for(var i = 0;i<array.length;i += 1){
    current = combine(current,array[i]);
  }
  return current;
}
console.log(reduce([1, 2, 3, 4], function(array, b) {
  return array.push(b);
}));

// → [1, 2, 3, 4, 5, 6]

I get this error:

TypeError: array.push is not a function (line 3) 

As far as I understand, this is because it is treating the array argument as something other than an array. However, I thought I fed it the variable “current” which is an array. Can someone explain the problem? Thanks.

Advertisement

Answer

Array.push doesn’t return an array. It returns the new length of the array it was called on.

So, your return array.push(b); returns an int. That int gets passed back as array… which is not an array so it doesn’t have a .push() method.

You need to do:

array.push(b);
return array;
User contributions licensed under: CC BY-SA
10 People found this is helpful
Advertisement