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);
}
});
我有一个包含不同角色的对象,我有一个包含特定颜色的数组。
我想做的是查看 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);
}
});