我的目标是根据一些对这个问题无关紧要的参数来获取一个随机对象。
function CreateObject(name) = {
this.name = name
};
var bob = CreateObject("Bob");
var john = CreateObject("John");
var rob = CreateObject("Rob");
var steven = CreateObject("Steven");
我是否需要将每个对象插入到一个数组中,或者如果我有100多个对象,是否有更好的方法呢?
答案 0 :(得分: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.
此技术也可以扩展为允许删除,但您必须以某种方式明确告知构造函数正在删除对象。否则,您的随机功能不仅无法正常工作,而且您的内存也会泄漏。
(注意,它并不是存储数组的构造函数。它存储在构造函数可以访问的闭包中。)
答案 1 :(得分:2)
最常用,简单而有效(?)的解决方案是将所有内容存储在数组中,然后选择一个随机索引。