@Shimpanze

JavaScript: почему не выводится значение переменной?

Добрый день!

Необходимо создать массив из изображений, но со случайными числами вместо имени файла (и чтобы они не повторялись). Чтобы получалось примерно так:

$.backstretch([
  "http://site.ru/2.jpg",
  "http://site.ru/81.jpg",
  "http://site.ru/17.jpg",
  "http://site.ru/22.jpg",
  ...
]


Что я делаю

Генерирую случайное число и сразу подставляю его в переменную randomNumber:

var randomNumber = Math.floor((Math.random()*100) + 1);


Затем, я подставляю эту переменную вместо имени файла в массив. Вот так:

$.backstretch([
  "http://site.ru/" + randomNumber + ".jpg",
  "http://site.ru/" + randomNumber + ".jpg",
  "http://site.ru/" + randomNumber + ".jpg",
  "http://site.ru/" + randomNumber + ".jpg"
]


Но, к сожалению, эта переменная не преобразовывается в число и код просто не работает.

JavaScript еще только изучаю, так что не ругайтесь сильно.

Подскажите где я не прав?

Спасибо!
  • Вопрос задан
  • 246 просмотров
Решения вопроса 3
sergiks
@sergiks Куратор тега JavaScript
♬♬
Чтобы не повторяться, я бы один раз задал «темплейт» результата:
var tmpl = "http://site.ru/%RANDOM%.jpg"
В нём потом поменяем подстроку %RANDOM% на очередное число.

Как сгенерить N случайных неповторяющихся чисел от 1 до 100. Например, создать массив из всех вариантов, и потом выдёргивать из него случайные позиции:
var All = [], i, N = 4, Selected = [], pos;
for( i = 1; i <= 100; i++) All.push(i);
// в массиве All теперь числа от 1 до 100

while( All.length > 0  &&  Selected.length < N) { // пока есть откуда брать и ещё не набрали N чисел
  pos = Math.floor( All.length * Math.random()); // случайный индекс из оставшихся элементов

  // Из массива All значение удаляется, он становится короче.
  // Это гарантия неповторения одинакового числа.
  Selected.push( All.splice( pos, 1)); 
}
// в массиве Selected теперь N случайных неповторяющихся чисел из диапазона от 1 до 100


Теперь остаётся собрать из этих чисел строки:
var result = [];
while( Selected.length) { // пока в массиве есть выбранные числа
  result.push( // в результат вставляем..
    tmpl.replace( // ..копию строки tmpl, в которой заменили..
      '%RANDOM%', // ..подстроку %RANDOM%
      Selected.pop()) // ..на число, которое взяли из Selected.
      // взятое число из Selected удалилось, массив стал короче.
  );
}

/* результат, массив строк: [
  "http://site.ru/45.jpg",
  "http://site.ru/29.jpg",
  "http://site.ru/46.jpg",
  "http://site.ru/97.jpg"
] */
Ответ написан
neuotq
@neuotq
Прокрастинация
Не знаю что ты там мутишь, но все работает:
function getRandomInt(min, max) {
  return Math.floor(Math.random() * (max - min)) + min;
}

var arr = [
  "http://site.ru/" + getRandomInt(1,101) + ".jpg",
  "http://site.ru/" + getRandomInt(1,101) + ".jpg",
  "http://site.ru/" + getRandomInt(1,101) + ".jpg",
  "http://site.ru/" + getRandomInt(1,101) + ".jpg"
]
console.log(arr);
Ответ написан
@RaulDuke
Добрый день,
что-то такое?

https://jsfiddle.net/olegcvetkov76/9jyLqot8/
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы