我想知道是否有一种简单的方法可以从数组中选择一个随机对象,其中一个对象属性与变量匹配。
这样的事情:
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");
答案 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
。