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

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

最佳答案

创建一个仅包含匹配元素的数组,然后从中随机获取一个条目非常简单:

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/

相关文章:

javascript - 引用别名文本值时,Cypress 看到未定义

javascript - 使用具有相同 URL 但不同文件的 Restangular

javascript - 我无法修复 "Uncaught SyntaxError: Cannot use import statement outside a module"的问题

java - 根据 if else 语句更改字符串数组项

javascript - 如何访问数组中的 URL 并将用户发送给它

C++11 从频繁变化的范围内生成随机数

java - 类、方法和随机数生成

javascript - 为给定表格行中的每个单元格设置 CSS 类的有效方法是什么?

c - 期望的常量表达式

c++ - 我应该为 C++ 中的序列中的无重复数字选择哪个随机生成器