Weird question if/else one line without else?

In this
lesson I decided to use a one line if/else statement and since I don’t need anything on the else side I had to “waste” an action somehow is there a better way to do it?


function filteredArray(arr, elem) {
let newArr = [];
// Only change code below this line
for (let i=0;i<arr.length;i++){
  arr[i].indexOf(elem) < 0  ?  newArr.push(arr[i]): arr=arr;
    
   
}
// Only change code above this line
return newArr;
}

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; rv:75.0) Gecko/20100101 Firefox/75.0.

Challenge: Iterate Through All an Array’s Items Using For Loops

Link to the challenge:

If you have to pull shenanigans to make a ternary work, you probably don’t want a ternary.

1 Like

This post on StackOverflow has a good answer to this. In short, this isn’t the ideal use case for the ternary operator. It would probably be better to just use a regular if statement.

if (arr[i].indexOf(elem) < 0) {
    newArr.push(arr[i])
    }

If you really want to do it this way, I think you can just replace the arr=arr with null.

2 Likes

You should really use a single if statement. Ternary operator is not meant to replace any if/else statement (especially since you don’t even need an else statement). Just keep it simple and readable.

2 Likes

If you really want to use the ternary operator, then you could do the following, but I do not believe it is more readable than the simple if statement.

newArr = newArr.concat(arr[i].indexOf(elem) < 0  ? [arr[i]]: [])

or maybe something a bit more readable:

  newArr = arr[i].indexOf(elem) < 0
   ? [ ...newArr, arr[i] ]
   : newArr;