<input class="my_class">
<input class="my_class">
<input class="my_class">
const elements = [...document.querySelectorAll('input.my_class')]; // массив
const ids = elements.map(() => Math.random().toString(36).substring(2)); // случайные строки
elements.forEach((el, i) => el.id = ids[i]); // назначить эти id соотв. элементам
rand()
перемежаются довольно «тяжёлыми» вычислениями под капотом по переводу float в строку, и это даёт время набрать энтропию. При желании можно создать условия, чтобы этот вызов вернул одинаковые значения.
У обычных пользователей на трёх элементах код не выдаст повторов.
Math.random()
возвращают одно и то же значение. Без старого IE8 в виртуальной машине, а у среднего обычного пользователя с относительно свежим браузером. зачем индекс, если потом вызвали функцию ещё раз, с другими тремя элементами, и они получили дубли id.