我想知道是否有一种简单的方法可以从其中一个对象属性与变量匹配的数组中选择一个随机对象。
像这样:
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");
最佳答案
创建一个仅包含匹配元素的数组,然后从中随机获取一个条目非常简单:
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 个条目,其中没有任何内容,这不是错误,但会导致值 未定义
。
关于javascript - 从具有特定参数的数组中检索对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34898067/