newArray.sort is not a function

newArray.sort is not a function
0.0 0

#1

I have no clue why I am getting “newArray.sort is not a function” error in this simple code. I can’t figure it out :S

My code

function getIndexToIns(arr, num) {
  var newArray = arr.push(num);
  var result = newArray.sort(function(a, b){
  return a - b;
  });
  return result;
}

getIndexToIns([40, 60], 50);

Link to the challenge:


#2

Array.push() does not return anything, especially not an array. It is a method of the Array prototype. It loops over the parameters you give it and adds them to the array. It only seems to return the last parameter value as a form of validation that you could use in a conditional or such.

Your variable newArray therefore does not contain an array, but the value of num.

If you’re curious, you can replicate the behavior of Array.push() with this:

let arr = [];
let data = ["Text", 1, false, undefined];

for( let entry of data ){
  // Use length of arr as index
  // Length measures # of items in array, index their entry so will always be one higher.
  arr[arr.length] = entry;
}
// or
for( let i = 0; i < data.length; i++ ){
  arr[arr.length] = data[i];
}

#3

don’t use .push(num) during assignment. This works:

function getIndexToIns(arr, num) {
  var newArray = arr;
  newArray.push(num);
  var result = newArray.sort(function(a, b){
  return a - b;
  });
  return result;
}

getIndexToIns([40, 60], 50);

#4

push returns the new length of the array, so in your example (getIndexToIns([40, 60], 50);) you are assigning the number 3 to the variable newArray on the first line of your function. Don’t assign the return value of push, you’re already directly modifying arr:

arr.push(num);
var result = arr.sort(function(a, b) {

This is exactly the same as arr.push(num) because in your code, newArr is arr, it’s not a new array.


#5

Thanks to everyone! I really appreciate it <3