Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Выбор случайного свойства объекта (https://javascript.ru/forum/misc/43499-vybor-sluchajjnogo-svojjstva-obekta.html)

Аленький цветочек 08.12.2013 02:03

Выбор случайного свойства объекта
 
Только начала учиться программировать. Пытаюсь написать прогу: есть окно, в левом верхнем углу находится квадратик, при нажатии на него, он перескакивает в любой незанятый угол окна, угол выбирается рандомно.
есть объект:
var corners = {
        tl : [0,0],
        tr : [0,bodyWidth - trButWidth],
        bl : [bodyHeight - trButHeight, 0 ],
        br : [bodyHeight - trButHeight,bodyWidth - trButHeight]
    };
 var randCorner = Math.floor( Math.random()*(Object.keys(corners).length)+0);

Мне нужно рандомно выбрать одно из свойств. А randCorner считает чиcло, но ведь corners не является массивом (знаю что в javascript все объекты:) Иначе все было бы проще : corners[randCorner] . А тут ключи объекта являются строками и к ним нельзя обратиться corners[1] Так как же выбрать случайный , правильней сказать, ключ?
Уже начинаю подумывать объект corners сделать массивом и не мучиться, но это ведь не так интересно.
PS есть идея записать все ключи в отдельный массив и рандомно выбирать из него ключи, а потом вызывать искомый объект. Но я в этом не уверена, тк думаю, что есть другой способ, более изящный чтоли.

Извиняюсь, если тупой вопрос или я непонятно его описала.

danik.js 08.12.2013 02:19

Object.keys(corners) - сама ведь написала.

Аленький цветочек 08.12.2013 02:24

danik.js))) спасибо. Вот я тупанула. Я над этим дня два думала )))))

danik.js 08.12.2013 02:30

А где получившийся код?

Аленький цветочек 08.12.2013 02:45

danik.js,
var corners = {
        tl : [0,0],
        tr : [0,100],
        bl : [100, 0 ],
        br : [100,100]
    };
    var randCorner = Math.floor( Math.random()*(Object.keys(corners).length)+0);
    var res = Object.keys(corners);
    console.log(randCorner + " " + res[randCorner]);

Как-то так. Мой код можно как-то сократить? Не умею еще писать красиво

danik.js 08.12.2013 03:08

Да врядли. Только res нужно на строку выше поднять, и соответственно для определения randCorner использовать уже res.length (и я не понял зачем там +0)

Аленький цветочек 08.12.2013 11:44

danik.js,
math.random() выдает числа в диапазоне [0;res.length)... Блин вот написала и поняла, а зачем я прибавляю 0. )))))))))))) Ох меня клинит


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