JavaScript 查找是否可以在对象中找到数组中的字符串

JavaScript Finding if string in array can be found in an object

我有一个包含不同角色的对象,我有一个包含特定颜色的数组。

我想做的是查看 roles.name 是否包含颜色数组中的任何字符串。我尝试了不同的方法,例如:

var colors = ["blue", "yellow", "brown", "red", "green", "pink", "purple"];
var roles = [{"name": "asd"},
            {"name": "blue"},
            {"name": "yellow"},
            {"name": "brown"}, 
            {"name": "red"},
            {"name": "green"},
            {"name": "pink"},
            {"name": "purple"},
            {"name": "fgh"},
            {"name": "jkl"}];
for (var i = 0; i < roles.length; i++) {
    if (roles[i].name.indexOf(colors)) {
   console.log(roles[i].name);
  }
}

var colors = ["blue", "yellow", "brown", "red", "green", "pink", "purple"];
var roles = [{"name": "asd"},
            {"name": "blue"},
            {"name": "yellow"},
            {"name": "brown"}, 
            {"name": "red"},
            {"name": "green"},
            {"name": "pink"},
            {"name": "purple"},
            {"name": "fgh"},
            {"name": "jkl"}];
roles.forEach(role => {
    if (role.name.indexOf(colors)) {
    console.log(role.name);
  }
});

但是对于这两种代码,结果都是完整的角色列表。

预期结果是所有颜色都记录到控制台。我得到的是所有角色都记录到控制台。

您正在向后使用 indexOf。它应该是 array.indexOf(valueToSearchFor),但你有 valueToSearchFor.indexOf(array)。另外, indexOf returns 索引,不是布尔值;要测试是否找到该元素,您必须将其与 -1.

进行比较

var colors = ["blue", "yellow", "brown", "red", "green", "pink", "purple"];
var roles = [{"name": "asd"},
        {"name": "blue"},
        {"name": "yellow"},
        {"name": "brown"}, 
        {"name": "red"},
        {"name": "green"},
        {"name": "pink"},
        {"name": "purple"},
        {"name": "fgh"},
        {"name": "jkl"}];
for (var i = 0; i < roles.length; i++) {
  if (colors.indexOf(roles[i].name) != -1) {
    console.log(roles[i].name);
  }
}

var colors = ["blue", "yellow", "brown", "red", "green", "pink", "purple"];
var roles = [{"name": "asd"}, {"name": "blue"}, {"name": "yellow"}, {"name": "brown"},{"name": "red"}, {"name": "green"}, {"name": "pink"}, {"name": "purple"}, {"name": "fgh"}, {"name": "jkl"}];
var discovered = [];
for (var i = 0; i < roles.length; i++) {
   for (var j=0 ; j < colors.length ; j++){
     if (roles[i].name == colors[j]) {
        discovered.push(roles[i]);
     }
   }
}

console.log(discovered);

您的角色只是一个对象。更喜欢这种格式。

    let colors = [
    {
        "name": "blue"
    },
    {
        "name": "yellow"
    },
    {
        "name": "brown"
    },
    {
        "name": "red"
    },
    {
        "name": "green"
    },
    {
        "name": "pink"
    },
    {
        "name": "purple"
    }
]

而且每种颜色都使用 .map()

colors.map(function (color) {
    console.log(color.name)
})

您在调用 indexOf 时切换了角色和颜色。 并且“indexOf”不是 return 一个“布尔值”,而是一个整数,如果它 returns 0 它将评估为“假”,这将导致错误的结果。

roles.forEach(function (role) {
  if (colors.indexOf(role.name) >= 0) {
    console.log(role.name);
  }
});