1.
Формулировка "так, чтобы они не повторялись". Ну, ты можешь взять первые десять элементов, и они не будут повторяться)) У тебя даже слова "случайных" нет, можно только по коду догадаться.
2.
Повторяемость вещь неоднозначная, когда речь идет о массиве. Ведь массив может быть из ста одинаковых ("повторяющихся") элементов
Потому что массив хранит не сами объекты, а ссылки на них. Так что все элементы могут ссылаться на один и тот же объект. В моем коде в выборку попадают только уникальные, но если в исходном массиве не наберется num уникальных, мой код зависнет (while() вообще потенциально опасен).
3. Почитай про методы массива, типа .slice(), .splice(). Вместо последнего цикла можно использовать вырезку, а можно сделать массив-копию через .concat() и обрезать через .length = num;