2016-01-20 82 views
1

我想知道是否有一种简单的方法来从数组中选择一个随机对象,其中一个对象属性与变量匹配。从具有特定参数的数组中检索对象

事情是这样的:

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"); 

回答

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

相关问题