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

Loop object which has property value of n in JS

本文关键字:循环 对象 属性 JS      更新时间:2023-09-26

这是member对象:

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

这是一个数组对象:

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

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

认为您想要编写一个函数,将isTaken设置为truethis.members中的member对象之一上,随机选择对象。如果是这样:

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),所以这就是我们如何从数组中随机选择一个条目。


从你对这个问题的评论来看:

然后重复迭代,直到对象的所有isTaken属性都为真。

好的,然后我们想让setTakenAtRandom告诉我们是否没有成员:

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