从具有特定参数的数组中检索对象

时间:2016-01-20 10:55:32

标签: javascript arrays random

我想知道是否有一种简单的方法可以从数组中选择一个随机对象,其中一个对象属性与变量匹配。

这样的事情:

var ninjas = [
    { name: "Sanji Wu", affiliation: "good" },
    { name: "Chian Xi", affiliation: "good" },
    { name: "Chansi Xian", affiliation: "bad" },
    { name: "Chin Chu", affiliation: "bad" },
    { name: "Shinobi San", affiliation: "neutral" },
    { name: "Guisan Hui", affiliation: "neutral" }
];

function getRandom(attr) {
    var r = Math.floor(Math.random() * ninjas.length);

    //pseudo code below  
    if (this affiliation is "attr") {
        return a random one that matches
    }
    // end pseudo code
};

var randomItem = getRandom("good");

1 个答案:

答案 0 :(得分:4)

相当简单地创建一个只包含匹配元素的数组,然后从中随机获取一个条目:

function getRandom(desiredAffiliation) {
    var filtered = ninjas.filter(function(ninja) {
        return ninja.affiliation == desiredAffiliation;
    });
    var r = Math.floor(Math.random() * filtered.length);
    return filtered[r];
}

如果你想让你找到运行时的属性,你也可以使用括号表示法来实现:

function getRandom(propName, desiredValue) {
    var filtered = ninjas.filter(function(ninja) {
        return ninja[propName] == desiredValue;
    });
    var r = Math.floor(Math.random() * filtered.length);
    return filtered[r];
}

您可能想要调整那些以允许没有匹配条目的可能性。现在他们会在这种情况下返回undefined,因为他们会尝试返回数组的第0个条目,其中没有任何内容,这不是错误,但会导致价值undefined