Javascript массив и извлечение информации - PullRequest
1 голос
/ 12 августа 2011

Хорошо, я даже не знаю, как озаглавить этот пост, но у меня есть небольшая логическая проблема, с которой мне нужна помощь Так что на первой странице сайта мне нужно 4 коробки. Эти четыре поля содержат 1 изображение, 1 заголовок, одну дату. Хитрость заключается в том, что эти четыре поля должны быть сгенерированы случайным образом из списка из 10. Таким образом, в javascript можно создать что-то вроде структуры xml, из которой можно выбрать 4 случайных числа и затем заполнить их ... так что я хочу, чтобы это работало ...

  • пункт 1
    • дата
    • название
    • 1010 * ЦСИ *
  • пункт 2
    • дата
    • название
    • 1020 * ЦСИ *
  • пункт 3
    • дата
    • название
    • ЦСИ

Можно ли поместить элементы в массив, а затем обращаться к их свойствам после их случайного выбора? Я мог бы сделать это с PHP / MySQL, но это очень не нужно для этого. есть идеи? Спасибо!

Ответы [ 3 ]

4 голосов
/ 12 августа 2011

Краткий ответ, да. Длинный ответ ниже.

var obj1 = {
    date: "04/12/1989",
    title: "My birthday",
    src: "path_to_some_image.png"
}
var obj2 = {
    date: "12/25/2011",
    title: "Christmas",
    src: "santa_claus.gif"
}

objs = [obj1, obj2];
rand = Math.floor(Math.random() * objs.length);

console.log(objs[rand].title + " is " + objs[rand].date);
// "My birthday is 04/12/1989"
// or "Christmas is 12/25/2011"
2 голосов
/ 12 августа 2011

Конечно, вы можете использовать Math.random для этой цели. Поместите свой список в массив, затем выберите случайное число от 0 до 9 и выберите этот элемент. Вы сделали бы это четыре раза, и вы готовы пойти ... , если вы не хотите один и тот же предмет дважды (или чаще) - что, я уверен, то, что вы хотите Нет повторений, я имею в виду. Это делает вещи более интересными, если вы не хотите смещенное распределение вероятностей. В этом случае алгоритм выглядит так:

  1. i = Случайное число от 0 до 9 -> выбрать массив [i]
  2. если (i == 9) -> все хорошо, пропустите 3
  3. if (i <9) -> массив подкачки [i] и массив [9]
  4. j = Случайное число от 0 до 8 -> выбрать массив [j]
  5. если (j == 8) -> все хорошо, пропустите 6
  6. if (j <8) -> массив подкачки [j] и массив [8]
  7. k = Случайное число от 0 до 7 -> выбрать массив [k] ...

Вы получаете шаблон. Этот метод также известен как Shuffle Фишера-Йейтса .

1 голос
/ 12 августа 2011

Вы должны использовать массив объектов ..

var items = [{
    'date': 'date of item 1',
    'title': 'title of item 1',
    'src': 'url/of/image-1'},
{
    'date': 'date of item 2',
    'title': 'title of item 2',
    'src': 'url/of/image-2'},
/* .. more items.. */
{
    'date': 'date of item 9',
    'title': 'title of item 9',
    'src': 'url/of/image-9'},
{
    'date': 'date of item 10',
    'title': 'title of item 10',
    'src': 'url/of/image-10'}];

for (var i = 1; i < 5; i++) {
    var item = items.splice(Math.floor(Math.random() * (items.length)), 1)[0];

    var el = document.getElementById('item-' + i);
    // insert the info you want in the DOM .. i just add it as text..
    el.innerHTML= item.date + ' - ' + item.title + ' - ' + item.src;
}

И использовать предопределенный HTML

<div id="item-1"></div>
<div id="item-2"></div>
<div id="item-3"></div>
<div id="item-4"></div>

Демонстрация в http://jsfiddle.net/qkMNb/1/

...