2013-09-16 5 views
1

Моя цель - получить случайный объект, основанный на нескольких параметрах, несущественных для этого вопроса.Случайно выберите объекты

function CreateObject(name) = { 
this.name = name 
}; 

var bob = CreateObject("Bob"); 
var john = CreateObject("John"); 
var rob = CreateObject("Rob"); 
var steven = CreateObject("Steven"); 

ли мне нужно вставить каждый объект в массив, или есть лучший способ сделать это, если у меня есть более 100 объектов?

+4

идти дальше, бросить его в массив, вы можете сделать это –

+0

Должен это, например, «var bob = CreateObject (« Bob »);'? –

+0

Почему мой вопрос был изменен, поэтому CreateObject был удален до («Боб»)? – ECMAScript

ответ

4

Если эти объекты создаются, но не уничтожены, вы можете иметь функцию конструктора для массива для вас и подключить случайную функцию в том, что:

var CreateObject = (function() { 
    var created = []; 
    var CreateObject = function(name) { 
     this.name = name; 
     created.push(this); 
    }; 
    CreateObject.random = function() { 
     return created[Math.floor(created.length * Math.random())]; 
    } 
    return CreateObject; 
}()) 

var bob = new CreateObject("Bob"); 
var john = new CreateObject("John"); 
var rob = new CreateObject("Rob"); 
var steven = new CreateObject("Steven"); 

CreateObject.random(); // CreateObject {name: "Rob"} 
CreateObject.random(); // CreateObject {name: "Steven"} 
CreateObject.random(); // CreateObject {name: "Rob"} 
CreateObject.random(); // CreateObject {name: "John"} 
// etc. 

Этот метод также может быть расширена, чтобы обеспечить удаление, но вам нужно как-то явно указать функции конструктора, что объекты будут удалены. В противном случае ваша случайная функция будет работать не только должным образом, но и утечка памяти.

(Обратите внимание, что это точно не функция конструктора, которая хранит массив. Он хранится в затворе, что функция конструктор имеет доступ.)

2

Самое используемое, простое и эффективное (?) Решение - хранить все на массиве, а затем подбирать случайный индекс.

Смежные вопросы