Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Дополнить скрипт (https://javascript.ru/forum/misc/60491-dopolnit-skript.html)

newuser123 03.01.2016 17:08

Дополнить скрипт
 
Здравствуйте.
Помогите плиз дописать скрипт, чтобы в урле <a href='/user/random.html'> слово random заменялось на случайное число.
Заранее благодарен за помощь.

<script type="text/javascript">
var images = new Array(
"images/thumb_1.jpg",
"images/thumb_2.jpg",
"images/thumb_3.jpg",
"images/thumb_4.jpg"
);
var img = images;
for (var i = 0; i < 5; i++) {
var a = Math.floor(Math.random() * img.length);
document.write ("<div class='photo'><a href='/user/random.html'><img src ='"+img[a]+"' /></a><br><br></div>");
img.splice(a,1);
};
</script>

newuser123 03.01.2016 17:26

Вроде что-то нацарапал, не знаю это правильно.

<script type="text/javascript">
var images = new Array(
"images/thumb_1.jpg",
"images/thumb_2.jpg",
"images/thumb_3.jpg",
"images/thumb_4.jpg",
"images/thumb_5.jpg",
"images/thumb_6.jpg",
"images/thumb_7.jpg",
"images/thumb_8.jpg",
"images/thumb_9.jpg",
"images/thumb_10.jpg",
"images/thumb_11.jpg",
"images/thumb_12.jpg",
"images/thumb_13.jpg",
"images/thumb_14.jpg",
"images/thumb_15.jpg",
"images/thumb_16.jpg",
"images/thumb_17.jpg",
"images/thumb_18.jpg",
"images/thumb_19.jpg",
"images/thumb_20.jpg",
"images/thumb_21.jpg",
"images/thumb_22.jpg",
"images/thumb_23.jpg",
"images/thumb_24.jpg",
"images/thumb_25.jpg",
"images/thumb_26.jpg",
"images/thumb_27.jpg",
"images/thumb_28.jpg",
"images/thumb_29.jpg",
"images/thumb_30.jpg"
);
var img = images;
var num = new Array(
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12",
"13",
"14",
"15",
"16",
"17",
"18",
"19",
"20",
"21",
"22",
"23",
"24",
"25",
"26",
"27",
"28",
"29",
"30"
);
var cifr = num;
for (var i = 0; i < 5; i++) {
var a = Math.floor(Math.random() * img.length);
document.write ("<div class='photo'><a href='/user/"+cifr[a]+".html'><img src ='"+img[a]+"' /></a><br><br></div>");
img.splice(a,1);
};
</script>

Keramet 03.01.2016 17:57

а не проще массивы определять в цикле:

for (var i = 1, images = [], num = []; i <= 30; i += 1) {
     images.push("images/thumb_" + i +".jpg");
     num.push("" + i);
}

Keramet 03.01.2016 18:02

newuser123,
а какой смысл заложен в переменную cifr? Чем она отличается от num?

рони 03.01.2016 18:03

newuser123,
Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]


О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.

рони 03.01.2016 18:03

newuser123,
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">

<script>
Array.prototype.randomShuffle = function(c, b) {
    c = c || 0;
    b = ++b || this.length;
    var a = b - c;
    b = a - this.length;
    this.length = a--;
    for (; 0 <= a && !(a < b); a--) {
        var d = Math.floor(Math.random() * a),
            e = void 0 === this[d] ? d + c : this[d];
        this[d] = void 0 === this[a] ? a + c : this[a];
        this[a] = e
    }
    this.reverse();
    this.length -= b;
    return this
};


</script>
</head>

<body>

<script>
Array(5).randomShuffle(1,30).forEach(function(el) {
     document.write ("<div class='photo'><a href='/user/"+el+".html'><img src ='images/thumb_"+el+".jpg' /></a><br><br></div>");
});
</script>
</body>

</html>

Keramet 03.01.2016 18:11

рони,
При всём уважении - но это, по-моему, слишком заумно. Красиво - но заумно :)
Чем плох вариант ТС, если его малость доработать? Ну к примеру:

for (var i = 1, num = []; i <= 30; i += 1) {
     num.push("" + i);
}
for (var i = 0; i < 5; i += 1) {
   var a = Math.floor(Math.random() * num.length);
   document.write ("<div class='photo'><a href='/user/" + num[a] +
                   ".html'><img src ='images/thumb_" + num[a] + ".jpg' /></a><br><br></div>");
   num.splice(a,1);
};

рони 03.01.2016 18:28

Keramet,
ок

ruslan_mart 03.01.2016 18:36

Цитата:

Сообщение от Keramet
а не проще массивы определять в цикле:

Зачем? Это лишнее.

Цитата:

Сообщение от Keramet
i += 1

Почему не i++?

Цитата:

Сообщение от Keramet
num.push("" + i);

Зачем кавычки?

newuser123 03.01.2016 18:55

Всем Большое спасибо за помощь, скрипт работает как надо использовал вариант доработки от Keramet.

Keramet 03.01.2016 19:37

Ruslan_xDD,
Цитата:

Сообщение от Ruslan_xDD (Сообщение 402414)
Почему не i++?

Книжку умную :haha: недавно читал там было сказано так:
Цитата:

И последний штрих к циклам for – замена выражения i++ одним из сле-
дующих:
i = i + 1
i += 1
JSLint предложит вам сделать это. Причина заключается в том, что
операторы ++ и -- проявляют «излишнюю хитрость». Если вы не соглас-
ны с такой заменой, установите в настройках JSLint параметр plusplus
в значение false. (По умолчанию он принимает значение true.) Далее
в этой книге будет использоваться последний из предложенных шаблонов:
i += 1.

Keramet 03.01.2016 19:41

Ruslan_xDD,
Цитата:

Сообщение от Ruslan_xDD
Цитата:

Сообщение от Keramet
Сообщение от Keramet
а не проще массивы определять в цикле:

Зачем? Это лишнее.

А как бы вы это реализовали без цикла? (или без массива?)
Цитата:

Зачем кавычки?
В принципе - не зачем, для наглядности (что в массиве не числа, а строки).

ruslan_mart 04.01.2016 05:01

Цитата:

Сообщение от Keramet
И последний штрих к циклам for – замена выражения i++ одним из сле-
дующих:
i = i + 1
i += 1
JSLint предложит вам сделать это. Причина заключается в том, что
операторы ++ и -- проявляют «излишнюю хитрость». Если вы не соглас-
1 Закас Н. «JavaScript.
Оптимизация производительности». – Пер. с англ. –
СПб.: Символ-Плюс. Выход книги ожидается в III квартале 2011 г.
38 Глава 2. Основы
ны с такой заменой, установите в настройках JSLint параметр plusplus
в значение false. (По умолчанию он принимает значение true.) Далее
в этой книге будет использоваться последний из предложенных шаблонов:
i += 1.

Значит всю жизнь использовали, а теперь какой-то деятель в своей книжке решил, что так писать нельзя? :haha:

По скорости i++ выигрывает, кстати.

Вот, для сравнения: https://jsfiddle.net/r6sL0Lw8/

i = i + 1 работает шустрей, но эта разница не ощутима в реале, в реале там разница в микросекундах.

Так что, ИМХО, лучше использовать i++/++i и не заниматься ерундой. :)


Часовой пояс GMT +3, время: 17:03.