Można też inaczej podejść do problemu, wg mnie prościej przynajmniej na początku nauki:
let firstIndex;
const arr1 = [1,4,21,55,87,40,55,32,90,2];
for(let i = 0; i < arr1.length; i += 1) {
const n = arr1[i];
if(arr1.indexOf(n) !== arr1.lastIndexOf(n)) {
firstIndex = i;
break;
}
}
console.log('Indeks: ' + firstIndex + ', czyli liczba: ' + arr1[firstIndex]);
//Indeks: 3, czyli liczba: 55
Generalnie idea jest taka, że iterujmy po tablicy i badamy, czy dany "current" element ma sobowtóra, czyli czy indeks pierwszego napotkania np. 55 jest równy indeksowi ostatniego napotkania (szukając od końca tablicy). Jeśli znaleźliśmy element występujący co najmniej dwa razy to kończymy zabawę i wpisujemy jego indeks w zmienną.
Moim zdaniem to jest czytelniejsze rozwiązanie od tego co przedstawiłeś.
Można też pobawić się np. Array.prototype i zrezygnować z pętli for:
const arr = [1,4,21,55,87,40,55,32,90,21,2];
const firstIndex = arr.findIndex((val, index, array) => {
return index !== array.lastIndexOf(val);
});
undefined
firstIndex; //2
Ale to tak bardziej dla ciekawostki, bo w zadaniu masz jasno napisane o pętli for.