这是member
对象:
function member() {
this.name = name;
this.isTaken = false;
}
这是数组对象:
function group() {
this.members = [new member(blahhh)];
}
现在,我想创建一个group对象的原型,它将迭代并根据索引生成一个随机数,该索引在数组内的isTaken
属性中的值为true。如果选择了一个对象,则其isTaken
属性将更改为true。
答案 0 :(得分:1)
我想你想要编写一个函数,将isTaken
设置为true
member
个this.members
对象中的group.prototype.setTakenAtRandom = function() {
var member = this.members[Math.floor(Math.random() * this.members.length)];
member.isTaken = true;
};
随机选择的对象。如果是这样的话:
isTaken
这并不是要避免已经将true
设置为group.prototype.setTakenAtRandom = function() {
var available = this.members.filter(function(m) { return !m.isTaken; });
if (available.length) {
var member = available[Math.floor(Math.random() * available.length)];
member.isTaken = true;
}
};
的成员。如果你想这样做,一种方法是先过滤掉之前拍摄的那些:
Math.floor(Math.random() * x)
0 <= n < x
会为您提供0
的值(也就是x
,但它不会是setTakenAtRandom
),这就是我们的方法随机从数组中选择一个条目。
从您对该问题的评论:
然后迭代将重复,直到对象的所有isTaken属性为真。
好的,那么我们希望group.prototype.setTakenAtRandom = function() {
var available = this.members.filter(function(m) { return !m.isTaken; });
if (available.length) {
var member = available[Math.floor(Math.random() * available.length)];
member.isTaken = true;
return true;
}
return false;
};
告诉我们成员是否用完了:
setTakenAtRandom
然后,只需反复调用false
,直到它返回{{1}}。