循环对象,JS中的属性值为n

时间:2016-11-13 14:38:59

标签: javascript arrays random prototype

这是member对象:

function member() {
       this.name = name;
       this.isTaken = false;
    }

这是数组对象:

function group() {
   this.members = [new member(blahhh)];
}

现在,我想创建一个group对象的原型,它将迭代并根据索引生成一个随机数,该索引在数组内的isTaken属性中的值为true。如果选择了一个对象,则其isTaken属性将更改为true。

1 个答案:

答案 0 :(得分:1)

你想要编写一个函数,将isTaken设置为true memberthis.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}}。