【问题标题】:Retrieve an object from an array with a specific parameter从具有特定参数的数组中检索对象
【发布时间】:2016-01-20 10:55:31
【问题描述】:

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

类似这样的:

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

【问题讨论】:

    标签: javascript arrays random


    【解决方案1】:

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

    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

    【讨论】:

      猜你喜欢
      • 2013-10-28
      • 2017-12-22
      • 2021-12-12
      • 1970-01-01
      • 1970-01-01
      • 2021-09-26
      • 2021-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多