Iterate Through All an Array's Items Using For Loops-- if statement not evaluating properly?

Tell us what’s happening:
My

if(!(arr[i].indexOf(elem)) >= 0)

evaluates true/false properly, but my for loop seems to be pushing arr[i] to the new array regardless of how the if statement evaluates. What am I missing here?

Your code so far


function filteredArray(arr, elem) {
  let newArr = [];
  // change code below this line
    for(let i=0; i<arr.length; i++){
        if(!(arr[i].indexOf(elem)) >= 0){
          newArr.push(arr[i]);
          console.log(arr[i] + "was pushed");
        } else {
          console.log(elem + "is in" + arr);
      }
      }
  // change code above this line
  return newArr;
}

// change code here to test different cases:
console.log(filteredArray([[3, 2, 3], [1, 6, 3], [3, 13, 26], [19, 3, 9]], 3));

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36.

What is the purpose of adding the ! before the (arr[i].indexOf(elem)) in the if statement?

I guess I could have wrote it as:

for(let i=0; i<arr.length; i++){
        if((arr[i].indexOf(elem)) >= 0){
              console.log(elem + "is in" + arr);          
        } else {
              newArr.push(arr[i]);
              console.log(arr[i] + "was pushed");

But it felt kinda weird putting the action inside of else. Is there a better way to rewrite this?

I agree. You do not even need an else statement. Another way of checking if something is not greater or equal to something is to check if it is less than something.

Ah, that makes sense. I changed it to

    for(let i=0; i<arr.length; i++){
        if((arr[i].indexOf(elem)) < 0){
          newArr.push(arr[i]);
          console.log(arr[i] + " was pushed");
        } else {
          console.log(elem + " is in " + arr);

and it works now. That does certainly make it a lot easier to digest. Thanks!